总和除数值问题(处理舍入误差)

Fer*_*ndo 5 sql rounding-error sum divide

我的产品价格为4欧元,我需要将这笔钱分配给3个部门。在第二列上,我需要获取此产品的行数并除以部门数。

我的查询:

select
   department, totalvalue,
   (totalvalue / (select count(*) from departments d2 where d2.department = p.product))
       dividedvalue
from products p, departments d
where d.department = p.department

Department  Total Value  Divided Value
----------  -----------  -------------
A           4            1.3333333
B           4            1.3333333
C           4            1.3333333
Run Code Online (Sandbox Code Playgroud)

但是,当我对这些值求和时,我得到3,999999。当然,在数百行中,我会有很大的不同...有没有机会定义2个十进制数字并舍入最后一个值?(我的结果是1.33 1.33 1.34)我的意思是,有什么方法可以调整最后一行?

Ben*_*min 0

如果将最终数字四舍五入到小数点后两位,那么在精确到小数点后六位的情况下,您需要大约 5,000 笔交易才能注意到 1 美分的差异。将小数位数增加到可接受的水平将消除大多数问题,即使用 9 位小数,您需要大约 5,000,000 笔交易才能注意到一分钱的差异。