我将最大小数位数设为4, 但为什么N.doublevalue()的输出为1234.56789999999 不是1234.5679?
try{
NumberFormat NF = NumberFormat.getInstance();
NF.setMaximumFractionDigits(4);
NF.setMinimumFractionDigits(3);
Number N = NF.parse("1234.56789999999");
System.out.println(N.doubleValue());
System.out.println(NF.format(1234.567899999));
}
catch(ParseException e){e.printStackTrace();}
}
答案 0 :(得分:0)
N.doubleValue()
实际上会将您的Number
转换为double
。 double是一个基本类型,它不支持任何舍入,它是写在内存中的原始浮点值,它没有你尝试转换它的确切值,所以相反它是最佳匹配从double
可能的值。也就是说,double
没有所有可能的值,因为内存有限,双数据类型是双精度64位IEEE 754浮点数。精度(后面的位置) dot)对于小的double
值更大,对于更大的值更低。非常大的double
数字在点之后甚至没有任何精度。与float
相同,但浮点数的精度远低于double
。