SQL 服务器:为什么 Float 比 Decimal 更准确

SQL Server: why is Float more accurate than Decimal

This post 有以下代码:

DECLARE @A DECIMAL(3, 0), @B DECIMAL(18, 0), @F FLOAT

SET @A = 3
SET @B = 3
SET @F = 3

SELECT 1 / @A * 3.0, 1 / @B * 3.0, 1 / @F * 3.0
SELECT 1 / @A * 3  , 1 / @B * 3  , 1 / @F * 3 

使用 float,表达式的计算结果为 1。使用 Decimal,表达式的计算结果为小数点后 9 的集合。为什么 float 在这种情况下会产生更准确的答案?我认为 Decimal 根据 Difference between numeric, float and decimal in SQL Server and Use Float or Decimal for Accounting Application Dollar Amount?

更准确/准确

您声明的小数值是固定宽度的,小数点后没有小数点。这会影响计算。

SQL 服务器有一个相当复杂的公式来计算包含小数的算术表达式的精度。详细信息在 documentation 中。您还需要考虑到数字常量是十进制格式,而不是数字。

此外,最后,您需要以您想要的精度转换回十进制格式。在这种情况下,您可能会发现 floatdecimal 是等价的。