sql server四舍五入函数round对少数数字(3.465)计算不正确

时间:2022-08-22 00:42:06
/**建表test**/
CREATE TABLE test(
id int NULL,
num float NULL, -- 要四舍五入的数字
roundNum float NULL -- 四舍五入之后的结果
)


/**建触发器**/
CREATE     trigger update_test
on test for update,insert 
as   
Declare @id as varchar(20) --id 
begin  
select @id=id from inserted
update test set roundNum=round(num,2)
where id=@id 
end  

/**插入一条数据**/
insert into test(id,num) values(1,1.465)
insert into test(id,num) values(2,2.465)
insert into test(id,num) values(3,1.565)
insert into test(id,num) values(4,2.565)
insert into test(id,num) values(5,2.665)

/**查询**/
select * from test
查询结果中 2.465、1.565、2.565等等这类数字的四舍五入结果不正确,其他大多数数字都正常

[img=http://photo.renren.com/photo/224831472/photo-2783960579?curpage=0&t=][/img]

8 个解决方案

#1


num DEC(18,3) NULL, -- 要四舍五入的数字
roundNum DEC(18,3) NULL -- 四舍五入之后的结果

#2


update test set roundNum=cast(round(num,2) as dec(18,2))

#3


update test set roundNum=round(num,2)

这里可以不用ROUND函数,DEC会自动四舍五入

#4


因为你的数据类型是FLOAT。。。在插入时就自动变了,改成NUMERIC(19,6)就行了

#5


CREATE TABLE test(
id int NULL,
num float NULL, -- 要四舍五入的数字
roundNum float NULL -- 四舍五入之后的结果
)

float --是近似值浮点数据类型 ,应使用双精度型 decimal或numeric

#6


用round函数吧,其他的有点资源浪费

#7


select cast(1.465 as decimal(18,2))
--1.47

#8


float是近似
不精确
如果要求精确还是别选择这个类型

#1


num DEC(18,3) NULL, -- 要四舍五入的数字
roundNum DEC(18,3) NULL -- 四舍五入之后的结果

#2


update test set roundNum=cast(round(num,2) as dec(18,2))

#3


update test set roundNum=round(num,2)

这里可以不用ROUND函数,DEC会自动四舍五入

#4


因为你的数据类型是FLOAT。。。在插入时就自动变了,改成NUMERIC(19,6)就行了

#5


CREATE TABLE test(
id int NULL,
num float NULL, -- 要四舍五入的数字
roundNum float NULL -- 四舍五入之后的结果
)

float --是近似值浮点数据类型 ,应使用双精度型 decimal或numeric

#6


用round函数吧,其他的有点资源浪费

#7


select cast(1.465 as decimal(18,2))
--1.47

#8


float是近似
不精确
如果要求精确还是别选择这个类型