2016-06-09 303 views
-1

我想转换一个double值,例如12.55BigDecimal与此代码:如何正确地将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)

即使当我把它变成圆形时,它怎么不起作用?我试图寻找解决方案,并找不到任何相关的东西。你如何正确设置小数?我假设你知道我想要做什么。提前致谢。

+0

为什么'product.getUnitPrice()'返回一个浮点值?这是真正的问题。 – EJP

+0

@EJP它实际上返回了两倍。 –

+1

['double * *是* floating-point](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3)实际上,这是仍然是真正的问题。您不必四舍五入才能存储到数据库中。不要用浮点钱。 – EJP

回答

3

Decimal (3,2)表示该号码总共有三位数字,一位在左边,两位在右边。 12.55不适合这个。 你打算存储三个左边?这将是decimal(5,2)

+0

噢....你是对的......我怎么没有意识到这一点?谢谢你,托马斯。这只是一个简单的解决方案。大声笑 :) –

0
如果你想保持DECIMAL(3,2)的

的代码将

new BigDecimal(12.55f, new MathContext(3, RoundingMode.HALF_EVEN)).setScale(2); 
相关问题