Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 你能解释一下DecimalFormatAPI的输出吗?_Java_Escaping - Fatal编程技术网

Java 你能解释一下DecimalFormatAPI的输出吗?

Java 你能解释一下DecimalFormatAPI的输出吗?,java,escaping,Java,Escaping,我有一个有价值的数字 0.947 现在,我将java.text的DecimalFormat API与以下模式和RoundingMode一起使用- double numberToFormat = 0.947; DecimalFormat restrictTo1DecimalPlace = new DecimalFormat("0.0%"); restrictTo1DecimalPlace.setRoundingMode(RoundingMode.DOWN); String formatte

我有一个有价值的数字

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时存储为双精度的内容

四舍五入得到94.6%


恐怕这就是生活。如果您想要精确的十进制行为,请使用十进制类型!请参见

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

0.94699999999999995292654375589336268603801727294921875
这是您的计算机在写入0.947时存储为双精度的内容

四舍五入得到94.6%


恐怕这就是生活。如果您想要精确的十进制行为,请使用十进制类型!请参见检查此链接。它已经解释清楚了。我不知道,可能我还需要更好地理解舍入,但我想问的是,为什么0.9471的值是94.7%,而不是94.6%,就像前面的例子一样。你需要更好地理解的不是舍入,而是浮点数的行为。检查这个链接。它已经解释清楚了检查过了,我还不知道可能我需要更好地理解四舍五入,但我想问的是为什么0.9471的值是94.7%,而不是94.6%,就像前面的问题示例,不是四舍五入,你需要更好地理解,但是浮点数的行为。如果你想要精确的十进制行为,那么就使用十进制类型!你能详细解释一下吗?@Vishal:我已经添加了一个SO问题的链接,其中包含了更多关于这个问题的信息。@Aaron:但一定要小心使用字符串构造函数来生成BigDecimal,否则你就回到了开始的地方。@Bathsheba我避免了用双精度构造BigDecimal,这可能会有问题。是否首选使用字符串构造函数而非双十进制算术?我几乎从不使用它们,所以我真的不知道最好的practices@Aaron:我也不使用BigDecimal-作为一名科学程序员,我对二进制浮点非常满意。如果您想要精确的十进制行为,请使用十进制类型!你能详细解释一下吗?@Vishal:我已经添加了一个SO问题的链接,其中包含了更多关于这个问题的信息。@Aaron:但一定要小心使用字符串构造函数来生成BigDecimal,否则你就回到了开始的地方。@Bathsheba我避免了用双精度构造BigDecimal,这可能会有问题。是否首选使用字符串构造函数而非双十进制算术?我几乎从不使用它们,所以我真的不知道最好的practices@Aaron:我也不使用BigDecimal——作为一名科学程序员,我对二进制浮点非常满意。