假设你不能有十进制数的人活着或死去,我会使用long
.
您能否提供一个示例说明您使用的未产生准确结果的数字?
BTW:如果你使用小于九千万亿的整数,甚至double
会产生准确的结果。
BTW2:如果你new BigDecimal
疯狂地创造但不保留它们,你会损害性能,但你不会耗尽内存。如果您的内存不足,则不是因为使用 BigDecimal。我建议您使用内存分析器来查找问题的真正原因。
一个例子
BigDecimal bd = BigDecimal.ZERO;
long l = 0;
double d = 0;
while (true) {
for (int i = 0; i < 100000000; i++) {
bd = bd.add(BigDecimal.ONE);
l++;
d++;
}
System.out.println("counting bd: " + bd + " l: " + l + " d:" + d);
}
使用 BigDecimal、long 和 double 打印数字计数。double 的格式不同,但值相同。
counting bd: 100000000 l: 100000000 d:1.0E8
counting bd: 200000000 l: 200000000 d:2.0E8
counting bd: 300000000 l: 300000000 d:3.0E8
... deleted ...
counting bd: 1900000000 l: 1900000000 d:1.9E9
counting bd: 2000000000 l: 2000000000 d:2.0E9
counting bd: 2100000000 l: 2100000000 d:2.1E9
counting bd: 2200000000 l: 2200000000 d:2.2E9
... deleted ...
即使-mx2m
将堆限制为 2 MB,它也不会耗尽内存。