乐趣区

关于java:订单系统除法精度缺失问题

在一个订单零碎中,须要限度下单数量不能超过库存的百分比,比方一个商品库存是 20 吨,在配置单次不能大于库存的 30%,解题思路是下复数 / 库存总数与配置做比照。然而除法运算可能会呈现除不尽的状况,比方 1 /3= 0.3333333….., 对于除法须要保留小数点后的数字。
过后我在计算的时候保留了两位小数,

  • 应用(5.99/20 = 0.29)< 0.3, 能够胜利。
  • 应用(6.01/20 = 0.30)= 0.3,这就 有问题 了。

问题起因

因为波及到保留小数,6.01/20 = 0.3005,就转成了 0.30,所以就判断谬误了。

解决方案一:小数位保留 4 位小数

如果和两位小数的做比照,相除的后果须要保留两倍的小数,也就是四位小数。

解决方案二:改成乘法运算。

计划一有余在于,须要依据比照数的小数点更新保留的小数位数,不是很通用。咱们须要将除法改成乘法,因为程序不会波及小数保留,
再回到订单零碎的计算,库存是 20 吨,下单限度不能大于 30%,所以每次下单数量不能大于 20 * 30% = 6, 再将下复数和 6 比拟即可。

总结

  • 除法须要保留精度,就会存在精度缺失,所以须要多保留几位小数。
  • 除法能够转成乘法,应用乘法后的后果做比照即可。
    如果感觉文章对你有帮忙的话,请点个赞吧!
退出移动版