调试一些与金融相关的 SQL 代码发现了 numeric(24,8) 数学精度的奇怪问题。
在您的 MSSQL 上运行以下查询,您将得到 A + B * C 表达式结果为 0.123457
选择 A、B、C、A + B * C FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A, CAST(0 AS NUMERIC(24,8)) AS B, CAST(500 AS NUMERIC(24) ,8)) 作为 C) T
所以我们丢失了 2 个重要符号。尝试以不同的方式解决此问题,我将中间乘法结果(为零!)转换为数字(24,8)可以正常工作。
最后有一个解决方案。但是我仍然有一个问题 - 为什么 MSSQL 会以这种方式运行,以及在我的示例中实际发生了哪些类型转换?