Float Vs BigDecimal
来源:互联网 发布:g3110扫描仪软件 编辑:程序博客网 时间:2024/06/15 02:02
什么是 Float? 什么是 BigDecimal? 他们的区别是什么?
我们先从一段代码说起:
1.9.3-p448 :069 > 0.1.class => Float 1.9.3-p448 :069 > 0.2.class => Float 1.9.3-p448 :068 > 0.1 + 0.2 => 0.30000000000000004
计算结果为一个近似值 0.30000000000000004,为什么?
这要从 Float 的存储说起。
Float 的存储
Float是按照2进制来存储的。
0.1 保存为 Float 格式时,它就不再是精确的 0.1,而是最接近它的一个二进制。
愚蠢的格式?
既然 Float 有误差,为什么还有人使用?
因为它占用空间小, 运算速度快, 精度固定。
涉及到钱,必须准确无误
我们想象一个场景,用户在付款时看到我们的系统 0.1 + 0.2 = 0.30000000000000004,他肯定骂一句「What’s the fuck! 」,然后拍拍屁股走人,再也不会购买我们的产品。
所以涉及到钱,不允许出现一丁点错误。使用高精度的 BigDecimal 就很有必要了。
decimal 是用字符串存的, 或者说是10进制, 占用空间大, 运算速度慢, 但是计算结果是精确值,不会有误差。
1.9.3-p448 :082 > BigDecimal.new('0.1') + BigDecimal.new('0.2') => # BigDecimal:7fa1bca4c468,'0.3E0',9(27)
总结
decimal 10进制保存, 占用空间大, 运算速度慢, 不存在 rounding error
float 2进制保存, 占用空间小, 运算速度快, 存在rounding error
0 0
- Float Vs BigDecimal
- JAVA菜鸟入门(7) default parameter , float/double vs BigDecimal
- int float double BigDecimal
- float double BigDecimal 详解
- Total Float vs. Free Float
- float double 大数运算 BigDecimal 和 BigDecimal(String) 构造函数
- java中float,double利用BigDecimal运算
- 使用BigDecimal对float进行正确计算
- java中float,double利用BigDecimal运算
- 数值计算精度问题(double,float,Bigdecimal)
- float,String转BigDecimal中的异常注意事项
- Float、double和Bigdecimal的区别
- JAVA中float、double、BigDecimal的区别
- float vs double
- float VS double
- float vs int
- Float Vs Double
- Java学习 --- float VS double
- HDU 2604 Queuing [递推]【矩阵快速幂】
- 如何在Eclipse中查看Java类库的源代码以及相应的api
- php数组和xml之间相互转化
- 51nod 1101 完全背包
- 计蒜客 数据结构 链表 ——应用筛选简历 C++
- Float Vs BigDecimal
- FastJSON
- IOS友盟 社会化分享 > 社会化iOS组件 > 分享集成
- 百度地图API -- 开发总结
- CSS基础-引入方法,选择器,继承
- POJ 1363 (简单栈)UVA 514
- 从腾讯文化VS阿里文化看滴滴和UBER的并购事件
- XML解析(DOM SAX JDOM DOM4J)
- onNewIntent调用时机