问题描述
js 如何求尾差?
相关代码
res.forEach(item => {item.单价 = (item.总价 /item.数量)})
你期待的结果是什么?
item的单价等于item总价/数量
但是因为四舍五入 会得出的单价 / 数量 不等于总价的情况
规则是总计数要等于明细数的合计 所以遇到四舍五入的情况 要把差值加到最后一个循环的item上
例子 一笔钱是456.87元,要按比例分成三份,第一份是15.8%,第二份是47.3%,第三份是36.9%,第一份:456.87×0.158=72.19。第二份:456.87×0.473=216.1,第三份:456.87×0.369=168.59,那么把这三个数再合计起来等于多少?72.19+216.1+169.59=456.88。比原来的总额多出了一分钱
常规办法是第一份 第二份 相乘 第三份用总价-第二第二之和
注:如果foreach不能得到最后一次循环时机 可选用for
可以阅读下http://zhangwenli.com/blog/20...
简单来说就是不去四舍五入,而是把能分配的分配了,456.87 * 0.158 = 72.18546,先给72.18,把0.05记下来,
456.87 * 0.158 = 72.18546 = 72.18 + 0.05
456.87 * 0.369 = 168.58503 = 168.58 + 0.05,
456.87 * 0.473 = 216.09950 = 216.09 + 0.09;
456.87 -72.18 - 168.58 - 216.09 = 0.02
0.02 按照最小0.01来分配,对应的占比从大到小为[9, 5, 5],所以给216.09 + 0.01, 72.18或者168.58 其中一个 + 0.01