今天小弟在写代码的时候遇到个问题,
需要用到一个计算百分比的,然后将百分比乘以一个整数值,得出的结果可能会有小数,直接转Int类型(不用四舍五入)这样就去掉了后面的小数。问题来了,如果得出的结果理论上为整数,但是在数据库里面却是会比理论小,比如 2会显示为1.99998 。这样将值转int 时,值就为1了。
SELECT CAST ((1.*2/3) AS DECIMAL(5, 2))*3; 结果为: 2.01
SELECT CAST ((1.*2/3)*3 as int); 结果为:1
SELECT (1.*2/3)*3; 结果为:1.999998
SELECT 2/3*3; 结果为: 0
SELECT 2/3; 结果为: 0
SELECT 2*3/3; 结果为: 2
------解决方案--------------------
百分比用float计算远远比decimal精确
select convert(float,1)*2/3*3 -- 2