我正在尝试转换双值,例如使用以下代码12.55
至BigDecimal
:
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)
。
即使我完成它,它怎么也不起作用?我试过寻找解决方案,找不到任何相关的东西。你如何真正设置小数?我假设你知道我在做什么。提前谢谢。
答案 0 :(得分:4)
Decimal (3,2)
表示该数字总共有三位数字,一个在左边,另一个在右边。 12.55
不符合此要求。
你打算在左边储存三个吗?它将是decimal(5,2)
答案 1 :(得分:0)
如果你想保留DECIMAL(3,2),代码就是
new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2);