为分裂投下num和denom的理由?

时间:2016-11-22 20:59:53

标签: sql-server sql-server-2008 tsql

精度是我应该将num和minomin都转换为十进制的原因,以便它返回一个小数吗?为什么第一个&第二个陈述带来不同的精确度?两者都只投了一部分。

而不是将两者都投射到decimal(12,4),为什么不将分母投射到更高的精度?

例如:

select 3/cast(2 as decimal(12,4))
select cast(3 as decimal(12,4))/2
select cast(3 as decimal(12,4))/cast(2 as decimal(12,4))
select 3/cast(2 as decimal(16,4))

RETURNS
1.5000000000000
1.500000
1.50000000000000000
1.50000000000000000

1 个答案:

答案 0 :(得分:1)

这与精度,比例和长度有关

精确度是数字中的位数。

Scale是数字中小数点右边的位数。

例如,数字123.45的精确度为5,缩放为2

下表定义了当操作结果为decimal类型时如何计算结果的精度和小数位数。当满足以下任一条件时,结果为十进制:

  • 两个表达式都是十进制的。
  • 一个表达式是十进制,另一个是优先级低于十进制的数据类型。

操作数表达式表示为表达式e1,精度为p1,缩放为s1,表达式为e2,精度为p2,缩放为{{ 1}}。

任何非十进制表达式的精度和比例是为表达式的数据类型定义的精度和比例。

s2

您可以在此MSDN article

中阅读更多内容