如何在使用Double.parseDouble()时禁用自动转换为指数表达式



当我运行以下程序时:

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 的精度

最新更新