尽管这不是您要问的,但这可以在不离开的情况下加速您的应用程序BigDecimal
:
从 Java 8 开始,这个问题BigDecimal
就自行解决了。添加了一个新类MathContext
并限制了计算操作的精度。
var num = new BigDecimal("1234.56780", new MathContext(10, RoundingMode.DOWN));
问题是精度10
不适用于小数点后的数字。它适用于有效位数。对于1234.50
,需要 6。
对于1_500_000_000.100
,需要 13 来保持数字不变。
因此,当您的精度为 10 并计算数十亿捷克克朗时,精度可能会受到影响。
尽管如此,例如 1000 的精度比无限精度(我认为这是默认值)要快得多。
这也可以应用于单个操作:
BigDecimal n = new BigDecimal("0.12345");
n = n.pow(2, new MathContext(1000, RoundingMode.DOWN));
n = n.pow(2, new MathContext(1000, RoundingMode.DOWN));
n = n.pow(2, new MathContext(1000, RoundingMode.DOWN));
n = n.pow(2, new MathContext(1000, RoundingMode.DOWN));