提问人:aykax 提问时间:10/9/2020 最后编辑:aykax 更新时间:10/10/2020 访问量:115
为什么 SQL Server 将精度降低到 3 或 6 位
Why SQL Server cut precision to 3 or 6 places
问:
我在sql(sql server management studio)中的计算有一个大问题
我有一个变量声明@KursEur decimal(32,10) = 4.2617000000
我需要 10 个位置后点
我需要将数据库中的值与点精度后 10 位的变量相乘的结果
列名 = 十进制 (32,10)
例子:
select ColumnName*@KursEUR
from TableName
结果:364947858427.467456
select ColumnName*4.2617000000
from TableName
结果:364947858427.46745556204873 <-我需要这个结果
我试过了,但它没有给出预期的结果:
select CAST(ColumnName as numeric(32,10))* CAST(@KursEUR as numeric(32,10))
from TableName
select CAST(ColumnName as float)* CAST(@KursEUR as float)
from TableName
select CAST(ColumnName as numeric(32,10))* CAST(@KursEUR as float)
from TableName
select CAST(ColumnName as float)* CAST(@KursEUR as numeric(32,10))
from TableName
select ColumnName* CAST(@KursEUR as float)
from TableName;
select ColumnName* CAST(@KursEUR as numeric(32,10))
from TableName
select CAST(ColumnName as numeric(32,10))* @KursEUR
from TableName
select CAST(ColumnName as float)* @KursEUR
from TableName
select CAST(ColumnName*@KursEUR as float)
from TableName
select CAST(ColumnName*@KursEUR as numeric(32,10))
from TableName
答:
2赞
TK Bruin
10/10/2020
#1
在 SQL Server 中将两个数字相乘时,产品的精度是通过将两个数字的精度相加 1 来确定的。在您的例子中,如果两个数字的精度均为 32,则生成的产品需要精度为 65!最大值为 38(在早期版本中或更小)!!
诀窍是使用较小的可变大小。如果将@KursEur转换为 decimal(11,10)。并将 ColumnName 转换为类似 decimal(25,10) 的内容,它将起作用。根据您的需要平衡两个数字之间的精度,只需确保它们加起来等于 37 或更少。
SELECT CAST(85634338040.5630277969 AS DECIMAL(25,10)) * CAST(4.2617000000 AS DECIMAL(11,10))
评论
ColumnName
decimal(32,10)
decimal(32, 10)