Java : 解析 NumberFormat 对象并将其分配给 Number 对象
Java : Parse NumberFormat Object and assign it to Number Object
我已经将最大小数位数设置为 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();}
}
N.doubleValue()
实际上将您的 Number
转换为 double
。 double 是一种基本类型,它不支持任何舍入,它是写入内存的原始浮点值,它没有您尝试转换的确切值,因此它是可能值的最佳匹配对于 double
。也就是说,double
并没有所有可能的值,因为它的内存有限,double 数据类型是双精度 64 位 IEEE 754 浮点数。,精度(放在后面点) 对于较小的 double
值较大,对于较大的值较小。非常大的 double
数字甚至在点之后根本没有任何精度。 float
也是一样,但是float的精度远低于double
.
我已经将最大小数位数设置为 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();}
}
N.doubleValue()
实际上将您的 Number
转换为 double
。 double 是一种基本类型,它不支持任何舍入,它是写入内存的原始浮点值,它没有您尝试转换的确切值,因此它是可能值的最佳匹配对于 double
。也就是说,double
并没有所有可能的值,因为它的内存有限,double 数据类型是双精度 64 位 IEEE 754 浮点数。,精度(放在后面点) 对于较小的 double
值较大,对于较大的值较小。非常大的 double
数字甚至在点之后根本没有任何精度。 float
也是一样,但是float的精度远低于double
.