在双精度数据类型的情况下,某些语言的java小数点精度会丢失
我很惊讶看到下面的程序,请告诉我它是如何运行的,因为我非常同意小数点后的精度,下面是程序
double fixedRate = 0.997500000000; //**output --->0.9975
// BigDecimal fixedRate = new BigDecimal("0.997500000000");
double fixedRate1 = 0.1234567890123456789;
System.out.println(fixedRate);
System.out.println(fixedRate1);
输出是
0.9975
0.12345678901234568
现在,请告知第一个输出是0.9975,但下一个的输出不是小数点后的截断,但为什么是第一个
# 1 楼答案
精度没有损失。它只是不打印,因为不需要更多的数字来区分打印值和任何其他双精度值
如果您确实想强制使用一定数量的小数位数,请查看系统。出来printf()或字符串。format()
有关更多详细信息和可能的格式,请参见https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
结果可能是这样的:
# 2 楼答案
根据你的问题
因为
double
是数字数据类型,因此不能包含前导零和尾随零一个} 方法)
double
不关心格式化——它只关心存储。打印时,它会转换为字符串(使用Double
的静态^{简单来说,值
0.9975
与0.997500000000
没有区别,或者与0.997500000000
相同,因为数字后面的零没有任何值但是如果你有这样的值^ {CD8>},那么所有的数字都会被打印出来。检查一下here
如果你想格式化这个值,你可以看到这个问题:How to properly display a price up to two decimals (cents) including trailing zeros in Java?