Java BigDecimal数据转换为相反的符号

din*_*okz 0 java precision type-conversion truncation bigdecimal

根据Java 7 文档,类java.math.BigDecimal中的方法longValue可以返回符号相反的结果.

将此BigDecimal转换为long.这种转换类似于Java™语言规范第5.1.3节中定义的从double到short的缩小原语转换:此BigDecimal的任何小数部分都将被丢弃,如果生成的"BigInteger"太大而无法容纳很长,只返回低位64位.请注意,此转换可能会丢失有关此BigDecimal值的整体大小和精度的信息,并返回具有相反符号的结果.

在什么情况下可能?

And*_*eas 5

只要the的值BigDecimal大于a long可以容纳的值,就有可能.

例:

BigDecimal num = new BigDecimal(Long.MAX_VALUE);
System.out.println(num);                  // prints: 9223372036854775807
System.out.println(num.longValue());      // prints: 9223372036854775807

num = num.add(BigDecimal.TEN);            // num is now too large for long
System.out.println(num);                  // prints: 9223372036854775817
System.out.println(num.longValue());      // prints: -9223372036854775799
System.out.println(num.longValueExact()); // throws: ArithmeticException: Overflow
Run Code Online (Sandbox Code Playgroud)