我只是想了解在使用 java 时如何计算各种值。我首先学习了 BigDecimal 类以及如何使用它进行高精度计算。我理解以下概念:
BigDecimal xx = BigDecimal.valueOf(0.1);
BigDecimal yy = BigDecimal.valueOf(0.2);
System.out.printf("Number is: %s", xx.add(yy,new MathContext(30, RoundingMode.HALF_DOWN)).toString());
我得到了我期望的 0.3 的结果。我接下来尝试并仍然坚持的是在计算后显示非常长的十进制值。我有2个例子。
BigDecimal xx = BigDecimal.valueOf(0.111111111111111111111111111111);
BigDecimal yy = BigDecimal.valueOf(0.001111111111111111111111111111);
System.out.printf("Number is: %s", xx.add(yy,new MathContext(30, RoundingMode.HALF_DOWN)).toString());
结果应该是 0.112222...222,但结果是 0.1122222222222222111。
第二个例子是使用减法而不是加法。答案应该是 0.11,但我最终得到的是 0.1099999999999999889。
我想我的问题分为两部分。第一部分包括我如何修复上述示例以获得正确答案,第二部分更笼统一些。我最终想要运行一些我想要非常高精度的物理计算,比如小数点后 20-30 位。我怎样才能执行我的计算,以便我保留我的答案并用小的舍入问题和/或截断来显示它们?