js 如何求尾差?

问题描述

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

阅读 1.9k
1 个回答

可以阅读下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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题