@a,@b为已知的两个FLOAT类型的数,@c 为@a,@b中精度更大的数,@aunit为a的单位,@bunit为b的单位
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4387
SET @bunit='元'
问题1:@a,@b 单位相等(按精度小的转换四舍五入判断两个值是否相等,所以@b转换后也为149003.44),但@b的精度高
,单位相等按原值输出:@c=149003.4387
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=39065753.213
SET @aunit='万元'
SET @b=3906.575321
SET @bunit='亿元'(假设已知亿元=10000*万元)
问题2:@a,@b 单位不相等,(按大单位先转换,然后按精度小的转换四舍五入判断两个值是否相等),但@a转换后的精度更高,所以@c为@a转换后的值
单位不相等按转换后的值输出:@c=3906.5753213
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4387
SET @bunit='元'
问题1:@a,@b 单位相等(按精度小的转换四舍五入判断两个值是否相等,所以@b转换后也为149003.44),但@b的精度高
,单位相等按原值输出:@c=149003.4387
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=39065753.213
SET @aunit='万元'
SET @b=3906.575321
SET @bunit='亿元'(假设已知亿元=10000*万元)
问题2:@a,@b 单位不相等,(按大单位先转换,然后按精度小的转换四舍五入判断两个值是否相等),但@a转换后的精度更高,所以@c为@a转换后的值
单位不相等按转换后的值输出:@c=3906.5753213
SET @a=39065753.213
SET @aunit='万元'
SET @b=3906.575321
SET @bunit='亿元'set @b=@b*10000
SELECT (CASE WHEN @b>@a THEN @b ELSE @a END )/10000
/*----------------------
3906.5753213
*/
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4387
SET @bunit='元'
SELECT (CASE WHEN @b<@a THEN @b ELSE @a END )
--第一个正确SET @a=149003.44
SET @aunit='元'
SET @b=149003.4401
SET @bunit='元'
SELECT (CASE WHEN @b<@a THEN @b ELSE @a END )--这个错误 , 正确为149003.4401,因为@b 小数更多
SET @aunit='元'
SET @b=149003.4401
SET @bunit='元'
SELECT (CASE WHEN @b<@a THEN @b ELSE @a END )---CASE WHEN @b<@a THEN @a ELSE @b END
你逻辑错了
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4387
SET @bunit='元'
SELECT (CASE WHEN @b<@a THEN @b ELSE @a END )
--第一个正确SET @a=149003.44
SET @aunit='元'
SET @b=149003.4401
SET @bunit='元'
SELECT (CASE WHEN @b<@a THEN @a ELSE @b END )--这个错误 , 正确为149003.4401,因为@b 小数更多/*
----------------------
149003.4387(1 row(s) affected)
----------------------
149003.4401*/
DECLARE @a FLOAT,@b FLOAT,@c FLOAT,@aunit VARCHAR(2),@bunit VARCHAR(2)
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4387
SET @bunit='元'
SELECT (CASE WHEN FLOOR(@b)<FLOOR(@a) THEN @a ELSE @b END )
--第一个正确SET @a=149003.44
SET @aunit='元'
SET @b=149003.4401
SET @bunit='元'
SELECT (CASE WHEN FLOOR(@b)<FLOOR(@a) THEN @a ELSE @b END )--这个错误 , 正确为149003.4401,因为@b 小数更多/*
----------------------
149003.4387(1 row(s) affected)
----------------------
149003.4401
*/
SET @a=149003.44
SET @aunit='元'
SET @b=149003.4
SET @bunit='元'
SELECT (CASE WHEN FLOOR(@b)<FLOOR(@a) THEN @a ELSE @b END )--好像不对吧,取小数点多的,应该为 149003.44
但是它是定长的,而你这个不定长,要判断的话要写好多东西。。