我试图找出今天似乎是舍入错误的来源,并发现数学方程式中使用的其中一列使用的是真实数据类型,这导致我的方程式返回不正确的值。
有人可以向我解释为什么
SELECT 776.2384 * cast(100 as real) / 100
等于776.2385
_
SELECT 776.2384 * 100 / 100
等于776.2384
?
我试图找出今天似乎是舍入错误的来源,并发现数学方程式中使用的其中一列使用的是真实数据类型,这导致我的方程式返回不正确的值。
有人可以向我解释为什么
SELECT 776.2384 * cast(100 as real) / 100
等于776.2385
_
SELECT 776.2384 * 100 / 100
等于776.2384
?
请参见使用小数、浮点数和实数数据以及数据类型优先级
在您的第二个查询中,
776.2384
是一个十进制数(其他两个值也是如此)。所以计算是在那种类型中完成的,结果在数学上是精确的。首先,您介绍一个
real
. 其他文字被提升为该类型,并根据 IEEE 754 规则以向上舍入模式进行计算。IEEE 754 浮点数并不精确,因此您通常不会获得您期望的“数学上精确”的结果。引用以上文章: