当我运行以下程序时:
System.out.println(Double.parseDouble("99999999999999") + 1);
我得到了:1.0E14
如何禁用自动转换以获得100000000000000.0
?
这与Double.parseDouble
无关,一切都与Double.toString
有关。
试试这个:
System.out.printf("%.1f", Double.parseDouble("99999999999999") + 1);
请改用BigDecimal。
import java.math.BigDecimal;
BigDecimal big = new BigDecimal("99999999999999");
big = big.add(BigDecimal.ONE); // Thanks @Chris for this tip
System.out.println(big); // Prints "100000000000000"
BigNumbers提供任意精度。Double仅限于(近似的(64位表示。如果你使用了太多的9,你会得到错误的答案:
System.out.printf("%.1f", Double.parseDouble("9999999999999998") + 1); // Note ends in 8
这将打印"10000000000000000.0"
,这是不正确的,应该是"9999999999999999.0"
,但该数字已超过Double 的精度