我有一个有价值的数字
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