我在入库明细表中设置了如下的公式:
如下:
字段如下:入库单号,入库数量(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)