如何正确地将BigDecimal转换为Decimal?

时间:2016-06-09 23:22:31

标签: java mysql jdbc bigdecimal

我正在尝试转换双值,例如使用以下代码12.55BigDecimal

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)

即使我完成它,它怎么也不起作用?我试过寻找解决方案,找不到任何相关的东西。你如何真正设置小数?我假设你知道我在做什么。提前谢谢。

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);