我正在尝试在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位小数后删除所有小数的东西...有什么建议吗?
谢谢。
答案 0 :(得分:5)
DecimalFormat.format(...)
给出的字符串表示确实在您的示例中只有2位数字。但是一旦你将它重新转换为双精度,就会出现准确性问题。当您尝试表示" exakt"时,像double这样的二进制基本格式将始终显示此类效果。小数部分。您可以更改为BigDecimal
以消除此类影响。