你能解释一下DecimalFormat API的输出吗?

时间:2017-07-21 15:58:27

标签: java escaping

我有一个值为

的数字
  

0.947

现在,我使用 java.text DecimalFormat API,使用以下模式和RoundingMode-

double numberToFormat = 0.947;    
DecimalFormat restrictTo1DecimalPlace = new DecimalFormat("0.0%");
restrictTo1DecimalPlace.setRoundingMode(RoundingMode.DOWN);
String formattedString = restrictTo2DecimalPlace.format(numberToFormat);

现在,我希望formattedString的值 94.7%,但是94.6%。 我知道该值已设置为RoundMode.Down,但为什么以下值不会向下舍入 -

  • 0.9471 - > 94.7%
  • 0.9447 - > 94.4%

1 个答案:

答案 0 :(得分:11)

最接近0.947的浮点数实际上是

0.94699999999999995292654375589336268603801727294921875

这是您编写0.947时计算机存储为double的内容。

向下舍入给你94.6%。

我害怕的生活。如果你想要精确的十进制行为,那么使用十进制类型!见data type to represent a big decimal in java