阿里的 Java 手册里写着:
6. [强制] 小数类型为 decimal,禁止使用 float 和 double。
说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不
正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
具体到实现,decimal 是用 BigDecimal 这个实现吗? 还是 Java 里有 decimal 这个类型?
1
depress 2017-10-06 11:44:03 +08:00
就是 BigDecimal
|
2
SoulSleep 2017-10-06 20:37:21 +08:00
是。目测这是阿里的 Java 规范啊...
不要用 Double 初始化一个 BigDecimal 对象 建议能用纯整数时,不用小数。因为...Double 丢失精度这个 feature,并不是所有人都知道.... |
3
jhdxr 2017-10-06 21:29:33 +08:00
被你的 这个问题刷屏了,不知道你为什么同时在这么多语言的板块里问一个 MySQL 的问题。
你贴的这一段规范适用于且仅适用于 MySQL。 你贴的这一段规范适用于且仅适用于 MySQL。 你贴的这一段规范适用于且仅适用于 MySQL。 别的数据库 /语言,也许有(或者说一般都有)专门的类库或方式处理浮点数精度的问题,但它真不一定叫 decimal。 |
4
loveCoding 2017-10-07 14:31:03 +08:00
阿里这份手册如果没有经验看了是没用的
|
5
abcbuzhiming 2017-10-08 11:32:51 +08:00
java 有 float,double,BigDecimal 三种,前两者会损失精度,最后一个是专门用于高精度计算的大数类型,但是会损失性能。如果用于金融场合且小数位并不多的时候,可以考虑 BigDecimal,但是如果小数位较多,建议整体变成 BigInt
|