【发布时间】:2020-06-17 09:39:07
【问题描述】:
谁能解释以下结果。我读过SQL小数类型以及做乘法和除法时的精度和小数位数,但我仍然无法理解:
select cast(7 as decimal(25,13))*cast(15 as decimal(25,13)) = 105.0000000000000
select cast(15 as decimal(25,13))/cast(11 as decimal(25,13)) = 1.3636363636363
select cast(7 as decimal(25,13))*cast(15 as decimal(25,13))/cast(11 as decimal(25,13)) = 9.545454
select cast(cast(7 as decimal(25,13))*cast(15 as decimal(25,13)) as decimal(25,13))/cast(11 as decimal(25,13)) = 9.5454545454545
所以乘法和除法产生 13 个小数,但是当它们链接起来时,它们突然产生 6 个小数。只有当乘法首先被转换为小数(25,13)然后才被除,它才会再次产生 13 个小数。 SQL Server 是否将乘法转换为默认的小数(38,0),然后除以小数(25,13)?
我正在为非常低价的产品进行 bom 计算,我想要我能得到的所有小数。我是否需要在每一步都进行这种转换,或者如果没有另外说明,我是否可以以某种方式为单个查询设置默认值以在所有小数上使用这个小数(25,13)?
【问题讨论】:
-
不确定您阅读的内容,但 the documentation 用于乘法和除法运算符调用“3。如果比例大于 6 并且整数部分大于 32,则比例将设置为 6。在在这种情况下,整数部分和比例都会减少,结果类型是小数(38,6)。"
-
@Dan Guzman 我相信你应该把你的评论变成一个答案
-
@DanGuzman 这如何解释乘法和除法本身都产生规模 13,但链接时产生规模 6?问题基本上是添加额外的演员如何改变计算,因为 sql server 认为乘法也产生 13 比例(通过 SQL_VARIANT_PROPERTY)。
-
@DanGuzman Ahh,这是因为没有演员表,精度设置为 38 而不是 25,这是由额外演员表修复的..
-
@mpn275,完全正确。不幸的是,没有“给我我想要的精度和规模”查询提示。您需要指定适当的精度和比例,以最大限度地满足您的需求。
标签: sql-server decimal