日期:2014-05-19  浏览次数:20706 次

关于四舍五入的问题请教?
我在入库明细表中设置了如下的公式:
如下:
字段如下:入库单号,入库数量(money),含税单价(money),税率(money),不含税单价,含税金额,不含税金额.折扣(money)
其中含税单价(money)是4位小数.
用户在录入入库明细的时候,只要输入入库数量和含税单价和税率,其中不含税单价,含税金额,不含税金额我是设置公式的.
不含税单价(round((isnull([含税单价],0)   *   isnull([入库数量],0)   /   (1   +   [税率])   *   (1   -   isnull([折扣],0))   /   100   *   100   /   [入库数量]),4))。
不含税金额(round((isnull([含税单价],0)   *   isnull([入库数量],0)   /   (1   +   [税率])   *   (1   -   isnull([折扣],0))   /   100   *   100),2))
含税金额(round((isnull([入库数量],0)   *   isnull([含税单价],0)   *   (1   -   isnull([折扣],0))   /   100   *   100),2))

用户输入:入库数量=2304,含税单价=6.7000,税率=0.17,得出:不含税单价=5.73(有四舍五入),含税金额=15436.80,不含金额=13193.84(没有四舍五入),应该是:13193.85才对的.
请教我的公式是不是有错,还是我的数据类型有错.为什么不四舍五入.请教大家,谢谢!

------解决方案--------------------
四舍五入最后一位通常有1的误差.

尽量在中间变量用3位小数.结果用2位小数.
------解决方案--------------------
(1)你的常量,如0,100之类,改为0.0, 100.0
(2)在数据库里公式不要用round,因为你有的结果是另一个公式的参数,在查询时再用Round。在用计算器手工计算增值税时,如果提前四舍五入了也有这个问题。
------解决方案--------------------
应该仅对结果四舍五入
------解决方案--------------------
用cast转换下 numeric(10,4),再对它前两位小数四舍五入
------解决方案--------------------
不要在计算公式中四舍五入,对结果四舍五入
------解决方案--------------------
convert(char(4),ziduan)