<分区>
我有一个简单的 sop 行:
System.out.println(0.0000877979+0.3067846127);
上面一行的输出是:0.30687241060000003
但预期是:0.3068724106
我很疑惑,怎么最后又来了额外的0000003
<分区>
我有一个简单的 sop 行:
System.out.println(0.0000877979+0.3067846127);
上面一行的输出是:0.30687241060000003
但预期是:0.3068724106
我很疑惑,怎么最后又来了额外的0000003
最佳答案
您需要了解什么是double
数:它是二进制 float 。因此,它不能准确表示所有十进制 数字。例如,取数字 0.2。没有有限的二进制表示形式 - 就像没有 1/3 的有限十进制表示形式一样。
如果您对十进制数字 感兴趣,那么您应该使用BigDecimal
。但是,这实际上可能不适合您要实现的目标。在您的案例中,数字表示是什么?它们是来自自然属性(体重、高度等)的测量值,还是“人工”的、自然的十进制值,例如金融值?这会影响您应该使用哪种类型。
BigDecimal
在三个重要方面不同于 double
:
构造 BigDecimal
时,从准确的值开始很重要 - 将 double
转换为 BigDecimal
几乎总是错误的。因此,如果您将用户输入作为文本,那很好:
BigDecimal bd1 = new BigDecimal("0.0000877979");
BigDecimal bd2 = new BigDecimal("0.3067846127");
System.out.println(bd1.add(bd2)); // Prints 0.3068724106
在其他情况下,您可以从另一个 BigDecimal
开始,或者可能是一个整数。
关于java - Java中Double类型的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142280/