我有一个值为
的数字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 :(得分:11)
最接近0.947
的浮点数实际上是
0.94699999999999995292654375589336268603801727294921875
这是您编写0.947时计算机存储为double
的内容。
向下舍入给你94.6%。
我害怕的生活。如果你想要精确的十进制行为,那么使用十进制类型!见data type to represent a big decimal in java