使用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));
}
}
答案 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的唯一方法是操纵结果字符串。