日期:2014-05-17  浏览次数:20712 次

求助关于收支
本帖最后由 yyr513 于 2013-12-21 19:39:25 编辑
假设
7月出售了价格1250元的产品 税收是1.05
所以价格为 1250*1.05=1312.5 四舍五入 为1313
收入1313元

8月出售了价格2250元的产品 税收是1.05
所以价格为 2250*1.05=2362.5 四舍五入 为2363
收入2363元

9月出售了价格2250元的产品 税收是1.05
所以价格为 2250*1.05=2362.5 四舍五入 为2363
收入2363元

而当我要查询的时候10月以前的收支平衡的时候
要等于 税后出售的金额的总和-收入的金额总和
即 税后出售的金额的总和 为 1312.5+2362.5+2632.5 =6037.5 四舍五入 6038
收入的金额总和为1313+2363+2363 =6039
这时 收支出现了-1的误差
这样算起来
就会出现 单个月查询时,收支平衡。但是多个月查询的时候就会出现误差。

求助怎样解决这个问题

------解决方案--------------------
仔细看了,因为:

税后出售的金额的总和 为 1312.5+2362.5+2632.5 =6037.5 那么这个是准确的数,这个时候四舍五入,就是6038,也就是相当于加上了0.5。

而上面:
所以价格为 1250*1.05=1312.5 四舍五入 为1313

所以价格为 2250*1.05=2362.5 四舍五入 为2363

所以价格为 2250*1.05=2362.5 四舍五入 为2363

那么就多了1.5了,上面是多了0.5,所以正好是相差1
------解决方案--------------------
在计算税后出售金额总和时,应先四舍五入后再求和. 而不是先求和在四舍五入.

create table yyr
(月份 int,出售产品价格 int,税收 decimal(6,2),税后出售金额 decimal(8,2),收入 int)

insert into yyr(月份,出售产品价格,税收)
 select 7,1250,1.05 union all
 select 8,2250,1.05 union all
 select 9,2250,1.05

-- 计算[税后出售金额],[收入].
update yyr
 set 税后出售金额=出售产品价格*税收,
     收入=round(出售产品价格*税收,0)

select * from yyr

/*
月份          出售产品价格  税收      税后出售金额       收入
----------- ----------- -------- ---------------- -----------
7           1250         1.05      1312.50         1313
8           2250         1.05      2362.50         2363
9           2250         1.05      2362.50         2363

(3 row(s) affected)
*/


-- 计算收支平衡
create proc sp_szph
(@beginmonth int, -- 起始月份
 @endmonth int    -- 结束月份
)   
as
begin
 set nocount