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

How to convert BigDecimal to Decimal properly?

我正在尝试转换双精度值,例如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)

为什么四舍五入后还是不行?我曾尝试寻找解决方案,但找不到任何相关内容。你如何真正正确地设置小数点?我假设你知道我想做什么。提前致谢。

Decimal (3,2)表示这个数字一共三位,左边一位,右边两位。 12.55 不适合这个。 你打算把三个放在左边吗?它将是 decimal(5,2)

of 如果你想保留 DECIMAL(3,2) 代码将是

new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2);