gpt4 book ai didi

sql - 为什么 SQL Server 将精度降低到 3 或 6 个位置

转载 作者:行者123 更新时间:2023-12-04 08:46:40 25 4
gpt4 key购买 nike

我在 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

最佳答案

在 SQL Server 中将两个数字相乘时,乘积的精度是通过将两个数字的精度加一来确定的。在您的情况下,如果两个数字的精度均为 32,那么生成的乘积将需要 65 的精度!最大值为 38(或更小的版本)!!
诀窍是使用较小的变量大小。如果您将@KursEur 转换为十进制(11,10)。并将 ColumnName 转换为类似 decimal(25,10) 的内容,它将起作用。根据您的需要平衡两个数字之间的精度,只需确保它们加起来等于或小于 37。

SELECT CAST(85634338040.5630277969 AS DECIMAL(25,10)) * CAST(4.2617000000 AS DECIMAL(11,10)) 

关于sql - 为什么 SQL Server 将精度降低到 3 或 6 个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64277924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com