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会自动四舍五入
这里可以不用ROUND函数,DEC会自动四舍五入
#4
因为你的数据类型是FLOAT。。。在插入时就自动变了,改成NUMERIC(19,6)就行了
#5
CREATE TABLE test(
id int NULL,
num float NULL, -- 要四舍五入的数字
roundNum float NULL -- 四舍五入之后的结果
)
float --是近似值浮点数据类型 ,应使用双精度型 decimal或numeric
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会自动四舍五入
这里可以不用ROUND函数,DEC会自动四舍五入
#4
因为你的数据类型是FLOAT。。。在插入时就自动变了,改成NUMERIC(19,6)就行了
#5
CREATE TABLE test(
id int NULL,
num float NULL, -- 要四舍五入的数字
roundNum float NULL -- 四舍五入之后的结果
)
float --是近似值浮点数据类型 ,应使用双精度型 decimal或numeric
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是近似
不精确
如果要求精确还是别选择这个类型
不精确
如果要求精确还是别选择这个类型