How to convert BigDecimal to Double in spring-data-mongodb framework

來源:互聯網
上載者:User

標籤:cep   post   cal   context   行修改   data   arraylist   url   div   

問題描述:我們都知道對於涉及錢的資料必須使用BigDecimal類型進行儲存,今天在查詢mongo時仍然有精度問題,雖然我在代碼中使用了Big Decimal類型,但mongo中使用的是double類型。我初步推斷是mongoTemplate在類型轉換時出現了問題,根源還是因為mongodb中使用了double類型來儲存。但是我決定不了mongodb於是我只能從代碼入手進行四捨五入的處理。

解決辦法:自訂一個customer-convert從而在mongoTemplate在mapping的時候進行轉換,從而不需要在各個地方進行修改。這裡還有一個問題就是原來使用了springboot,於是也就沒了mongo.xml的配置。自己實現的convert就沒有地方註冊了。最後我通過Java配置的方式自己new一個mongoTemplate並且注入到Ioc容器中,這樣在我new mongoTemplate的時候就有機會註冊convert了。

下面是具體代碼

@Configurationpublic class MongodbConfiguration {    @Value("${spring.data.mongodb.uri}")    private String mongoUrl;    @Bean    public MongoMappingContext mongoMappingContext() {        MongoMappingContext mappingContext = new MongoMappingContext();        return mappingContext;    }    @Bean    @Primary    public MongoDbFactory dbFactory1() throws UnknownHostException {        return new SimpleMongoDbFactory(new MongoClientURI(mongoUrl));    }    @Bean    public MappingMongoConverter mappingMongoConverter1() throws Exception {        DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(this.dbFactory1());        MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, this.mongoMappingContext());        List<Converter> converters = new ArrayList<>();        converters.add(new DoubleToBigDecimalConverter());        CustomConversions customConversions = new CustomConversions(converters);        converter.setCustomConversions(customConversions);        return converter;    }    @Bean    @Primary    public MongoTemplate mongoTemplate() throws Exception {        return new MongoTemplate(this.dbFactory1(), this.mappingMongoConverter1());    }}@ReadingConverterclass DoubleToBigDecimalConverter implements Converter<Double,BigDecimal> {  //在這裡我們可以統一將double類型進行四捨五入並指定小數點後兩位    @Override    public BigDecimal convert(Double source) {        BigDecimal bigDecimal = BigDecimal.valueOf(source);        return bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP);    }}

  

How to convert BigDecimal to Double in spring-data-mongodb framework

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.