双精度损失

时间:2016-10-07 09:55:22

标签: java double

我有点困惑,因为我一直都失去精确度。

也许我的操作类型错误。我有一个像“100.00”的字符串。但是当我做的时候

  

Double.parseDouble(“100.00”)它被切断为100.需要帮助。提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可能会使用System.out.println(d)打印您的号码。它将在内部调用Double.toString(double),其规范状态为

  

m或a的小数部分必须打印多少位数?必须至少有一个数字来表示小数部分,并且除此之外必须有多个,但只有多少,更多的数字才能唯一地将参数值与double类型的相邻值区分开来。

这是因为double数字没有"十进制精度"的概念。它是一个二进制数字,具有固定的二进制精度(二进制点后的二进制数字)。

答案 1 :(得分:0)

只需使用BigDecimal而不是Double:

BigDecimal houndred = new BigDecimal("100.00").setScale(2, BigDecimal.ROUND_HALF_UP);

BigDecimal根本没有松动精度。此外,您可以根据需要设置比例,精度和舍入模式。