在Java中格式化小数位

时间:2011-12-26 09:20:12

标签: java formatting double decimal

我正在尝试在Java中将double格式化为只有2位小数。

我已阅读以下帖子: How to round a number to n decimal places in Java

出于某种原因,这些方法中的每一种都无法处理我拥有的某些数字......

例如:

DecimalFormat df = new DecimalFormat("#.##");
normalizedValue = Double.valueOf(df.format(normalizedValue));

如果我打印normalizedValue,我会得到类似于以下内容的结果:

-78.64000000000001

18.97

59.469999999999985

-63.120000000000005

(注意:有些格式正确...有些格式不正确)

所以,这些方法似乎是圆的,但是我需要在2位小数后删除所有小数的东西...有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:5)

DecimalFormat.format(...)给出的字符串表示确实在您的示例中只有2位数字。但是一旦你将它重新转换为双精度,就会出现准确性问题。当您尝试表示" exakt"时,像double这样的二进制基本格式将始终显示此类效果。小数部分。您可以更改为BigDecimal以消除此类影响。