为什么DecimalFormat的Decimal四舍五入不一致?

时间:2019-02-05 14:56:08

标签: java decimal rounding decimalformat

有人可以告诉我DecimalFormat的默认RoundingMode是什么吗? 因为它看起来不一致。下面是代码,后面是输出。

我想知道为什么舍入模式不一致。

import java.text.DecimalFormat;

public class DecimalFormatter {
private static final ThreadLocal<DecimalFormat> DF = new 
ThreadLocal<DecimalFormat>() {
@Override
 protected DecimalFormat initialValue() {
  return new DecimalFormat("0.00");
 }
};

public static void main(String[] args) {
 try {
   System.out.println(DF.get().format(0.095));
   System.out.println(DF.get().format(0.195));
   System.out.println(DF.get().format(0.295));
   System.out.println(DF.get().format(0.395));
   System.out.println(DF.get().format(0.495));
   System.out.println(DF.get().format(0.595));
   System.out.println(DF.get().format(0.695));
   System.out.println(DF.get().format(0.795));
   System.out.println(DF.get().format(0.895));
   System.out.println(DF.get().format(0.995));
  } catch (Exception e) {
   e.printStackTrace();}
}
}

OUTPUT
0.10
0.20
0.29
0.40
0.49
0.59
0.69
0.80
0.90
0.99

1 个答案:

答案 0 :(得分:0)

浮点数不正确。当您说0.95时,它实际上意味着0。09500000000000000111021022462465655652362366806802033125。仍然超过0.95,因此它四舍五入为“正确”。但是,如果您写0.295,则它的实际含义是0。294999999999999984984456877655247808434069156646728515625(在0.295以下)并将四舍五入为0.29。

如果需要精确值,则需要使用其他数据类型。