这个说法其实不准确,需要澄清一下:
Java 的 BigDecimal 并不是“任意精度整数”,而是“任意精度的十进制数(带小数点的数)”。
下面分几点说明:
BigDecimal 是什么BigDecimal 用于表示不可变的、任意精度的有符号十进制数。
它由两部分组成:
BigInteger)int,表示小数点向右移动多少位例如:
new BigDecimal("12.34")
内部等价于:
1234(整数)2所以它底层用整数存,但表达的是小数。
“任意精度”指的是:
对比:
double / float:固定精度,有舍入误差BigDecimal:精度由你决定,不会自动丢失BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b)); // 0.3 精确
你可能是把下面几个概念搞混了:
| 类 | 特点 |
|---|---|
BigInteger |
任意精度整数 |
BigDecimal |
任意精度十进制数(可含小数) |
double |
固定精度浮点数 |
所以:
BigInteger 是“任意精度整数”BigDecimal 不是整数,是“任意精度十进制数”BigDecimal 使用整数(BigInteger)来存“未缩放值”,是为了:
BigDecimal 不是任意精度整数如果你愿意,我也可以给你画个简单的内存结构图,或者讲讲为什么金融系统必须用 BigDecimal。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。