我很惊讶看到下面的程序请告知它是如何表现的,因为我非常想念小数点之后的精确度,下面是progrmam
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,但是接下来它不会截断小数点之后但是为什么第一个呢。
答案 0 :(得分:0)
This is a printing problem.Please use this format to print your values and tell me the result:
double fixedRate = 0.997500000000;
double fixedRate1 = 0.1234567890123456789;
System.out.println(String.format("%.19f", fixedRate ));
System.out.println(String.format("%.19f", fixedRate1 ));
Good Luck !
答案 1 :(得分:0)
精度不会丢失。它只是不打印,因为您不需要更多数字来区分打印值和任何其他双值。
如果您确实要强制使用一定数量的小数位数,请查看 System.out.printf()或 String.format()。
有关详细信息和可能的格式,请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html。
结果可能如下所示:
System.out.printf("%.19f%n",fixedRate);
System.out.printf("%.19f%n", fixedRate1);
答案 2 :(得分:0)
根据你的问题
首先输出的输出是0.9975,但是接下来的输出是0.9975 在小数点之后截断,但为什么首先是
由于double
是数值数据类型,因此无法保存前导零和尾随零。
double
并不关心格式化 - 它仅关于存储。当您打印它时,它将转换为字符串(使用Double
的静态toString
方法)。
简单来说,值0.9975
与0.997500000000
没有差异,或者与0.997500000000
相同,因为数字后没有任何值,所以为零。
但是考虑一下你是否有这样的价值0.9975000000001
,那么所有的数字都会打印出来。检查here。
如果您想格式化值,则可以看到以下问题:How to properly display a price up to two decimals (cents) including trailing zeros in Java?