例如
入库:
a产品 入库 2盒 /6包 = 12包 单价 :10 合计金额:20
b产品 入库 3盒 /15包 = 45包 单价 :20 合计金额:60
总金额:70
用小单位出库 (转化时小数保留4位)就是:
a产品 入库 5包 单价 :1.6667 合计金额:8.3335
b产品 入库 4包 单价 :1.3333 合计金额:5.3332
总金额:13.6667
那么现在a的库存为:7 包 * 单价:1.6667 不等于 20 - 8.3335
7 * 1.6667 = 11.6669
20 - 8.3335 = 11.6665
结果就有了 0.0004 的误差
这个东西,在进销存系统中及财务系统中是有专门的科目来进行处理的,一般叫做库存进价调整或者成本调整。
你题目中的这个大包拆小包的场景是无可避免的,就算没有大包拆小包,在税率计算或者移动加权平均成本计算中,也会存在小数点差异,所以进销存系统中也应该增加一个这样的事务单据来让 “期初加减发生等于期末”,在财务口径上也必须增加对应的科目来处理这种差异
我之前有写过关于类似的差异金额处理的文章,虽然不是你这种大包拆小包的场景,应该也可以借鉴一下
由于在计算时使用了除法,会导致计算出来的平均成本出现小数的情况,大多数情况都是除不尽的,而且业务软件系统中数值也有小数位数控制,所以只能四舍五入。几乎每次计算都会有一点偏差,导致总进货成本-总存货成本<>总出货成本,这部分需要定期进行处理,有两种方式
A.当差异累计到某个值的时候(比如足以使小数点后最后一位数发生变化),重算平均成本,即
新成本单价=(存量*成本单价+差异额)/存量
这种方式有一定的滞后性,但工作量小
B.根据差异产生成本调整的单据,即把差异合理化
————————————————
版权声明:本文为CSDN博主「DarkAthena」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wwwwwwgame/article/details/120670484
这个好像无法避免,你可以每次转化成小数保留5位,然后4舍五入变成4位,这样长期来看的话相当于没有损失
你的单价 1.6667 是四舍五入的单价,
如果你按单价 1.6667 计算12包,那总价都不是20,你用20来减 那肯定有误差呀,这个误差是你单价四舍五入的时候就已经造成的了
按单价 1.6667 算12包的 合计金额为:1.6667*12=20.0004
可以通过更多的小数位来确保相对精确 类似 两个浮点数的比较 a - b < 0.00000001 就认为 a == b
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!