【发布时间】:2008-09-24 10:31:37
【问题描述】:
调试一些金融相关的 SQL 代码发现了一个关于 numeric(24,8) 数学精度的奇怪问题。
在您的 MSSQL 上运行以下查询,您将得到 A + B * C 表达式结果为 0.123457
选择 A, 乙, C, A + B * C 从 ( 选择 CAST(0.12345678 作为数字(24,8))作为 A, CAST(0 作为数字(24,8))作为 B, 铸造(500 作为数字(24,8))作为 C ) T
所以我们丢失了 2 个重要符号。尝试以不同的方式解决此问题,我将中间乘法结果(为零!)转换为数字(24,8)可以正常工作。
最后有一个解决方案。但是我仍然有一个问题 - 为什么 MSSQL 会以这种方式运行,以及在我的示例中实际发生了哪些类型转换?
【问题讨论】:
标签: sql-server floating-point type-conversion casting floating-accuracy