我想转换一个double值,例如12.55
到BigDecimal
与此代码:如何正确地将BigDecimal转换为Decimal?
BigDecimal unitPrice = new BigDecimal(product.getUnitPrice());
其结果是,我得到了这样的事情12.550000000000000710542735760100185871124267578125
那我也与此代码四舍五入它关闭:
unitPrice.setScale(2, RoundingMode.HALF_EVEN)
,得到了这样的结果12.55
这很好。然而,当我将它设置为参数与此代码插入到MySQL数据库:
addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));
所以,当我运行它,我得到这个SQL错误:
Data truncation: Out of range value for column 'price_per_unit' at row 2
我知道这个问题是这样的代码:
addProduct.setBigDecimal(4, unitPrice.setScale(2, RoundingMode.HALF_EVEN));
正如我在这行代码调试它,则该值是
12.550000000000000710542735760100185871124267578125
,我已设置在MySQL的列的数据类型为DECIMAL(3,2)
。
即使当我把它变成圆形时,它怎么不起作用?我试图寻找解决方案,并找不到任何相关的东西。你如何正确设置小数?我假设你知道我想要做什么。提前致谢。
为什么'product.getUnitPrice()'返回一个浮点值?这是真正的问题。 – EJP
@EJP它实际上返回了两倍。 –
['double * *是* floating-point](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3)实际上,这是仍然是真正的问题。您不必四舍五入才能存储到数据库中。不要用浮点钱。 – EJP