Java:解析NumberFormat对象并将其分配给Number对象
我已将最大分数位数设置为4, 但是为什么N.doublevalue()的输出是1234.567899999 不是1234.5679Java:解析NumberFormat对象并将其分配给Number对象,java,number-formatting,digits,Java,Number Formatting,Digits,我已将最大分数位数设置为4, 但是为什么N.doublevalue()的输出是1234.567899999 不是1234.5679 try{ NumberFormat NF = NumberFormat.getInstance(); NF.setMaximumFractionDigits(4); NF.setMinimumFractionDigits(3); Number N = NF.parse("1234.56789999999"); Syst
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();}
}
N.doubleValue()
实际上将您的数字
转换为double
。double是一种基本类型,它不支持任何舍入,它是写入内存的原始浮点值,它没有您试图转换它的精确值,因此它是与double
的值可能的最佳匹配。也就是说,double
并没有所有可能的值,因为它的内存有限,double数据类型是双精度64位IEEE 754浮点。对于较小的double
值,精度(点后的位置)较大,而对于较大的值,精度较低。非常大的double
数字在点之后甚至没有任何精度。float
也是如此,但是float的精度远远低于double
,因为您只是打印一个double
,它没有任何内在格式。您的具体要求是什么?对于精确的四舍五入,你应该使用BigDecimal。参考此链接,你会得到确切的想法,谢谢大家。我在一本书中看到了代码,但我不知道它是如何工作的,所以我试图找到答案。我现在明白了。