为什么 SQL 服务器将精度削减到 3 或 6 位
Why SQL Server cut precision to 3 or 6 places
我在sql(sql server management studio)
中的计算遇到了很大的问题
我有一个变量 declare @KursEur decimal(32,10) = 4.2617000000
点运算后需要10个位置
我需要将数据库中的值乘以一个点精度后10位的变量的结果
列名 = decimal(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 服务器中将两个数字相乘时,乘积的精度是通过将两个数字的精度相加再加一来确定的。在您的情况下,如果两个数字的精度均为 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 management studio)
中的计算遇到了很大的问题我有一个变量 declare @KursEur decimal(32,10) = 4.2617000000
点运算后需要10个位置
我需要将数据库中的值乘以一个点精度后10位的变量的结果
列名 = decimal(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 服务器中将两个数字相乘时,乘积的精度是通过将两个数字的精度相加再加一来确定的。在您的情况下,如果两个数字的精度均为 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))