在Java中舍入后为负零?

时间:2014-08-13 12:55:33

标签: java rounding negative-number

使用RoundingMode库后,我得到了一个奇怪的输出。在评估此代码后,我得到了输出-0?有谁知道如何处理这样的问题?

import java.math.RoundingMode;
import java.text.DecimalFormat;


public class RoundingProblem {

    public static void main(String[] args) {
        final double value = -0.04365321;
        DecimalFormat df = new DecimalFormat("#,##0");
        df.setRoundingMode(RoundingMode.HALF_EVEN);
        System.out.println("rounding: " + df.format(value));
    }

}

4 个答案:

答案 0 :(得分:0)

DecimalFormat是一个输出工具;  它所做的只是获取一个值并显示它是所需的格式。 如果输入为负且form格式导致DecimalFormat仅显示0, 数字仍为负数,并显示为-0。

答案 1 :(得分:0)

使用NumberFormat和DecimalFormat类时,在某些极端情况下,以前版本的JDK的舍入行为是错误的。当使用非常接近平局的值调用format()方法时会发生这种错误行为,其中由NumberFormat或DecimalFormat实例的模式指定的舍入位置正好位于平局的位置。在这种情况下,发生了错误的双舍入或错误的非舍入行为。

https://bugs.openjdk.java.net/browse/JDK-7131459

尝试使用新的Java :)

答案 2 :(得分:0)

您确定要使用","用十进制格式?

new DecimalFormat("#,##0");

""是一个分组分隔符,"。"用于小数分隔。

正如其他人已经回答的那样,假设您的模式编号四舍五入为零,并且由于JDK行为,它会打印-0。

答案 3 :(得分:0)

Negative sign in case of zero in java

获得0而不是-0的唯一方法是操纵结果字符串。