tsql - T-SQL 十进制除法精度

标签 tsql precision

有谁知道为什么,使用 SQLServer 2005

SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)

给我 11.74438969709659,

但是当我将分母的小数位数增加到 15 时,我得到的答案不太准确:
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)

给我 11.74438969

最佳答案

对于乘法,我们只需将每个参数中的小数位数加在一起(使用笔和纸)来计算输出小数位数。

但 split 只会让你头破血流。我现在要躺下。

但在 SQL 术语中,它是 exactly as expected.

--Precision = p1 - s1 + s2 + max(6, s1 + p2 + 1)
--Scale = max(6, s1 + p2 + 1)

--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 9 + 54 = 72
--Max P = 38, P & S are linked, so (72,54) -> (38,20)
--So, we have 38,20 output (but we don use 20 d.p. for this sum) = 11.74438969709659
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)


--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 15 + 54 = 84
--Max P = 38, P & S are linked, so (84,54) -> (38,8)
--So, we have 38,8 output = 11.74438969
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)

如果遵循 this rule,您可以进行相同的数学计算同样,如果您将每个数字对视为
  • 146804871.212533000000000 和 12499999.999900000
  • 146804871.212533000000000 和 12499999.999900000000000
  • 关于tsql - T-SQL 十进制除法精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423925/

    相关文章:

    sql - 计算考勤时差

    sql - 对SQL中的对象(表)具有权限的用户和角色列表

    SQL:一个月中的总天数

    tsql - 带 SUM 的 SQL 子查询

    c++ - 为什么像 1.82 这样的简单 double 最终会变成 1.819999999645634565360?

    java - tan 45 给我 0.9999

    math - float 学有问题吗?

    c++ - 格式化 float : returning to default

    sql - 使用 LIKE 语句查询任何单词,而不是整个单词

    matlab - 用非常小的值计算matlab中的函数