Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正确的顺序是什么?它应该是圆形的吗?>;铸造或铸造->;圆形的_Sql_Sql Server - Fatal编程技术网

Sql 正确的顺序是什么?它应该是圆形的吗?>;铸造或铸造->;圆形的

Sql 正确的顺序是什么?它应该是圆形的吗?>;铸造或铸造->;圆形的,sql,sql-server,Sql,Sql Server,当我尝试四舍五入时,正确的顺序应该是什么 ,CAST(ROUND(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID),2) as decimal(16,2)) AS Percentage ,ROUND(CAST(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID) as decimal(16,2)),2)

当我尝试四舍五入时,正确的顺序应该是什么

   ,CAST(ROUND(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID),2) as  decimal(16,2)) AS Percentage
   ,ROUND(CAST(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID) as decimal(16,2)),2) AS Percentage

只要你把小数四舍五入到小数转换的小数位数,这是一样的

使用较低的刻度转换为
十进制
,将自动对最后一位进行四舍五入

SELECT
    CONVERT(DECIMAL(18,2), '1.009'), -- 1.01
    CONVERT(DECIMAL(18,2), '1.005'), -- 1.01
    CONVERT(DECIMAL(18,2), '1.004'), -- 1.00
    CONVERT(DECIMAL(18,2), '1.001') -- 1.00
转换为十进制(小数量相同)后的舍入是没有意义的,而在舍入后转换为十进制只会缩小其规模

DECLARE @BigDecimal DECIMAL(30,10) = '1.123456789'

SELECT
    Original = @BigDecimal,                                                 -- 1.1234567890
    Rounded = ROUND(@BigDecimal, 2),                                        -- 1.1200000000
    RoundedThenDecimal = CONVERT(DECIMAL(18,2), ROUND(@BigDecimal, 2)),     -- 1.12
    Decimal = CONVERT(DECIMAL(18, 2), @BigDecimal),                         -- 1.12
    DecimalThenRounded = ROUND(CONVERT(DECIMAL(18, 2), @BigDecimal), 2)     -- 1.12

结论:只需按您需要的小数位数进行转换,而不用考虑四舍五入。

首先我们应该转换/转换,然后进行四舍五入。 从第二轮的文件:


四舍五入(numeric\u expression,length[,function])

如果您需要小数点后两位的答案,您应该使用cast to decimal(n,2)。

函数的作用是:返回整数。当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型

因此,任何具有100.0的操作都会导致隐式十进制转换为100.0类型,即具有十进制位置

所以下面的陈述就足够了

 ,CAST(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID) as decimal(16,2)) AS Percentage
有关在SQL server中基于表达式中的组合类型对精度和比例的影响,请参见


还有优先规则。

如果我们想做一个更精确的计算,而得到的结果却精度较低,那该怎么办?当我们将int(从count)乘以100.0,然后再除以int时,精度就有点高了。这就是我们得到一切的地方。在这个例子中,后面的一切只是改变精度和比例,或者显示或多或少的亮度。然而,我试图把注意力集中在这个问题上:正确的顺序是什么?如果是圆形->铸造或铸造->圆形@DhruvJoshi:)请参见此精度链接[圆形不会改变精度。如果进行铸造,您将自动对数据进行圆形,如
选择铸造(10.389为十进制(10,2))
给出10.39外观:
选择圆形(748.58,-3)
下一步查看:
选择四舍五入(强制转换(748.58为十进制(6,2)),-3)
@DhruvJoshi