即使使用精度和比例集也无法存储小数-SQL
我发现,即使正确设置了精度和刻度,我计算的十进制结果也会达到0.00。请参阅下面的代码:即使使用精度和比例集也无法存储小数-SQL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我发现,即使正确设置了精度和刻度,我计算的十进制结果也会达到0.00。请参阅下面的代码: create table test ( per decimal(10,2), perler varchar(1) ) insert into test(per,perler) values ('1.1','1') UPDATE test set per = (1105018/2227130) where perler ='1' select * from test 上述结果如下: per |
create table test
(
per decimal(10,2),
perler varchar(1)
)
insert into test(per,perler) values ('1.1','1')
UPDATE test set per = (1105018/2227130) where perler ='1'
select * from test
上述结果如下:
per | perler
0.00 | 1
SQLServer执行整数除法。您需要添加一个小数点以使其生效:
UPDATE test
SET per = (1105018.0/2227130)
WHERE perler = '1';
如果您想对类型学究气十足,可以显式转换为十进制:
UPDATE test
SET per = CONVERT(DECIMAL(10, 20), 1105018) / CONVERT(DECIMAL(10, 2), 2227130)
WHERE perler = '1';
但是,这通常不是必需的。似乎是正确的。你在做整数除法。向其中一个值添加一个.0,然后看看会发生什么。@Tieson T.Wow..现在它可以工作了。是不是我必须执行强制转换?
更新测试集per=(1105018/2227130.0),其中perler='1'
应该起作用。@J.Smith您可能应该了解什么是整数除法。@TiesonT。只需铸造:铸造(1105018浮球)/铸造(2227130浮球)