我有一个有价值的数字


  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%

最佳答案

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

0.94699999999999995292654375589336268603801727294921875


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

向下舍入可得出94.6%。

恐怕就是这种生活。如果要精确的十进制行为,请使用十进制类型!见data type to represent a big decimal in java

09-10 13:51