Java 大值的双到长转换不会产生相同的值

Java 大值的双到长转换不会产生相同的值,java,Java,打印结果为 double d = 1000000000138719341D; System.out.print(Double.valueOf(d).longValue()); 为什么不同?如何获得正确的结果?来自: double:double数据类型是双精度64位IEEE 754 浮点数。其值的范围超出了本文的范围 讨论,但在 Java语言规范的第节。对于十进制值, 此数据类型通常是默认选择。如上所述, 此数据类型不应用于精确值,例如 货币 您需要java.math.BigDecimalcla

打印结果为

double d = 1000000000138719341D;
System.out.print(Double.valueOf(d).longValue());
为什么不同?如何获得正确的结果?

来自:

double:double数据类型是双精度64位IEEE 754 浮点数。其值的范围超出了本文的范围 讨论,但在 Java语言规范的第节。对于十进制值, 此数据类型通常是默认选择。如上所述, 此数据类型不应用于精确值,例如 货币


您需要
java.math.BigDecimal
class

什么是“正确的”结果?正确的值应该是10000000138719341a
double
只能可靠地保存15-16位有效数字@谢谢你的帮助!
1000000000138719360