分摊后重量=重量/总金额*分摊后金额
很正常,浮点数精度丢失的原因 我就不多说了,博客大把 。而且 也没有好的解决方案。
做一个四舍五入吧。精确到4位小数,就可以解决这个情况。
很正常,这是分摊中的常见问题。
比如1元钱分给3个人,精度到分,所以每人0.33元;
就出现一个差额 1-0.33*3 = 0.01;
要把这个差额(无论正负)补到某个人(比如第一人),最终分为 {0.34,0.33,0.33}。
你也一样处理:
首先每个分摊的重量要 Round() 成固定的精度,
然后把差额补给某个客户。
怎么计算的?是java程序计算还是什么直接SQL计算的?java程序计算的时候将值转成BigDecimal然后再运算就不会有问题了。
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
b1.add(b2).doubleValue(); //相加
b1.subtract(b2).doubleValue(); //相减
....