如何正确地将 BigDecimal 转换为 Decimal?
How to convert BigDecimal to Decimal properly?
我正在尝试转换双精度值,例如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)
。
为什么四舍五入后还是不行?我曾尝试寻找解决方案,但找不到任何相关内容。你如何真正正确地设置小数点?我假设你知道我想做什么。提前致谢。
Decimal (3,2)
表示这个数字一共三位,左边一位,右边两位。 12.55
不适合这个。
你打算把三个放在左边吗?它将是 decimal(5,2)
of 如果你想保留 DECIMAL(3,2) 代码将是
new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2);
我正在尝试转换双精度值,例如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)
。
为什么四舍五入后还是不行?我曾尝试寻找解决方案,但找不到任何相关内容。你如何真正正确地设置小数点?我假设你知道我想做什么。提前致谢。
Decimal (3,2)
表示这个数字一共三位,左边一位,右边两位。 12.55
不适合这个。
你打算把三个放在左边吗?它将是 decimal(5,2)
of 如果你想保留 DECIMAL(3,2) 代码将是
new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2);