Java:解析NumberFormat对象并将其分配给Number对象
我已将最大分数位数设置为4, 但是为什么N.doublevalue()的输出是1234.567899999 不是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();}
}
# 1 楼答案
实际上,
N.doubleValue()
将Number
转换为double
。double是一种基本类型,它不支持任何舍入,它是写入内存中的原始浮点值,它没有您试图转换它的精确值,因此它是double
值的最佳匹配。也就是说,double
并没有所有可能的值,因为它的内存有限,双精度数据类型是双精度64位IEEE 754浮点。,对于较小的double
值,精度(点后的位置)更高,而对于较大的值,精度更低。非常大的double
数字在点之后甚至没有任何精度。与float
相同,但float的精度远远低于double