Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-数字和浮点数据类型_Sql Server - Fatal编程技术网

Sql server SQL Server-数字和浮点数据类型

Sql server SQL Server-数字和浮点数据类型,sql-server,Sql Server,我在尽可能多地精确到小数点位时遇到了困难。如果我将6个不同的数字转换为numeric36,18,然后在它们之间进行计算,结果值将在小数点后6位处截断。如果我使用float,我可以走得更远,但据我所知,它们也被切断了 任何帮助都会很好,谢谢 结果精度:[p1-s1+s2+max6,s1+p2+1]> 36-18+18+max6,18+36+1=36+55=91结果的刻度:[max6,s1+p2 +1]->max6,18+36+1=55在这种情况下,精度大于38,在这种情况下,如文件中所述 *结果精

我在尽可能多地精确到小数点位时遇到了困难。如果我将6个不同的数字转换为numeric36,18,然后在它们之间进行计算,结果值将在小数点后6位处截断。如果我使用float,我可以走得更远,但据我所知,它们也被切断了

任何帮助都会很好,谢谢

结果精度:[p1-s1+s2+max6,s1+p2+1]> 36-18+18+max6,18+36+1=36+55=91结果的刻度:[max6,s1+p2 +1]->max6,18+36+1=55在这种情况下,精度大于38,在这种情况下,如文件中所述

*结果精度和刻度绝对最大值为38。当结果精度大于38时,相应的刻度为 减少以防止结果的整数部分被截断

刻度必须减少91-38=53,即55-53=2。。。 由于表达式的原因,最小刻度长度为6 标度=[max6,s1+p2+1],不能小于6- 因此我们有


事情可能会很棘手,这取决于计算的顺序

考虑以下变量:

DECLARE @A as NUMERIC(36,19) = 100
DECLARE @B as NUMERIC(36,19) = 480
DECLARE @C as NUMERIC(36,19) = 100
计算应付账款*C

如果您想使用公式@Dudi answer计算A/B*C,我们有:

A/B类型为数字38,6

结果将是0.208333,比例为6乘以100,我们将得到20.833300

计算A*C/B

A*C的结果是10000个数字类型38,6。按C下潜,结果将是数值38,6型的20.833333

然后,结果可能会因计算顺序的不同而有所不同,同样的问题也曾被指出


显示您的模式和代码。为什么您认为结果在6个位置被截断?也许您的输出减少了它,但实际值是正确的?这不是SQL Server的问题。您需要在Web上搜索许多文章,这些文章解释了固定点数据类型、数字和浮点数据类型的行为、差异和相对优点。这些行为存在于不同的语言中,非常值得理解。谢谢大家。我不知道这有多复杂。