irb(main):025:0> 1.9+18.99
=> 20.889999999999997
这种小数如何控制精度呢?我想要的结果是 20.89!如何才能得到呢?
其实 20.889999999999997 比 20.89 精确,因为后者只有四位有效数字...
如果是算钱,从出生起就得用 bigdecimal 控制住:
BigDecimal.new('1.9') + BigDecimal.new('18.99')
我知道结算最小单位用分。
那就是说换算值钱都转成整数来计算,然后需要结果的时候再除以 100。
加入我两个小数需要乘呢?
1.25*58.12
这个难道需要变成
(125*5812)/1000
#14 楼 @woaigithub 你给我一个这样的场景来..
一般意义上的商品都是不可分割的。没人会说我要 58.12 个什么东西。
如果你是卖切糕的。那另当别论。
你的系统就应该设计成按克来结算,而不是按斤。这样才不会出现说我要 58.12 斤的切糕的情况。
[1] pry(main)> (190 + 1899)/100.0
=> 20.89
你说的这个 100,如果在电子商务系统中,是不是应该根据结算单位和显示单位来定呢? 如果显示是千克,结算用克,就该是 1000 吧。
结算单位又如何选择呢? 为什么选择克呢,怎么不选则毫克呢? 看来引出来不少问题!
@woaigithub @Saito 整数处理的话,还有打 0.85 折,利息 1% 之类的事情哦,bigdecimal 在 10 进制加减乘是可以完全不丢的