为什么我在这个演员表达式中丢失了两个小数点?

Lil*_*sey 1 t-sql sql-server

我在这里错过了什么?

select cast ( ( cast (100 * 39  as decimal )  / 41) as decimal(5,2)) 
Run Code Online (Sandbox Code Playgroud)

得到95.12的结果

declare @percent decimal 
set  @percent = cast ( ( cast (100 * 39  as decimal )  / 41)  as decimal(5,2)) 
select @percent     
Run Code Online (Sandbox Code Playgroud)

结果为95

两个2小数点发生了什么,如何让它们回到变量中?

Aar*_*and 7

DECIMAL它本身没有任何小数位(实际上是DECIMAL(18,0)).您需要指定精度和比例,例如

DECLARE @percent DECIMAL(5,2);
SET @percent = 1.0 * (100 * 39) / 41;
SELECT @percent;
Run Code Online (Sandbox Code Playgroud)