在 Java 里,BigDecimal 本身并不是“任意精度整数”类型,它用于任意精度的十进制浮点运算(带标度 scale)。如果你关心的是任意精度整数,更准确对应的是 BigInteger;而 BigDecimal 内部在某些实现里也会用到 BigInteger。
下面分几点说明性能情况和适用场景。
setScale、RoundingModedouble / long:纳秒级BigDecimal:微秒级甚至更慢| 类型 | 相对速度 |
|---|---|
| long | ⚡⚡⚡⚡⚡ |
| double | ⚡⚡⚡⚡ |
| BigInteger | ⚡⚡ |
| BigDecimal | ⚡ |
实际中:
BigDecimal通常比long慢 10~100 倍+,取决于运算复杂度
longlong 慢long / int,最后再转 BigDecimalnew BigDecimalBigDecimal.valueOf(double)
而不是:new BigDecimal(double)
long amountInCents = 12345; // 123.45 元
LongAdder、AtomicLongBigDecimal 不是为性能设计的,而是为精度设计的。
任意精度整数(BigInteger / BigDecimal)在 Java 中性能远低于原生类型,只应在“必须精确”的场景使用。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。