我看基本涉及金额的,都是用 decimal 多。 如果我是一个数量问题呢,1,2,3,4,小数点也最多就 1.11,2.34 两位而已。 请问使用 decimal 和 float 有什么区别呢?
decimal 是用字符串存的,或者说是 10 进制,占用空间大,运算速度慢,精度可定制 float 是按照 ieee 标准存的,或者说是 2 进制,占用空间小,运算速度快,精度固定
只是 10 进制有限小数在 2 进制里可能是无限循环小数,存储空间的长度是固定的肯定要截断
1.4+1.7
=> 3.0999999999999996
如果是工程计算,这个结果精度是非常高的,但如果是算钱,这个结果是 3.1 才对:
require 'bigdecimal'
(BigDecimal('1.4') + BigDecimal('1.7')).to_s 'F'
=> "3.1"
1.9.3p125 :001 > 1.4+1.7
=> 3.0999999999999996
1.9.3p125 :002 > 2.1+3.2
=> 5.300000000000001
1.9.3p125 :003 > 455.2+2333.1112
=> 2788.3111999999996
1.9.3p125 :004 > 2.3*4
=> 9.2
1.9.3p125 :005 > 2.55*4.2
=> 10.709999999999999
试了一下,还真的是,这种精度要什么场合才用的上。。 那像一般需要精确的数值,还是用 decimal 好了吧。我存的只是商品数量,需要有小数。