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 中。您还需要考虑到数字常量是十进制格式,而不是数字。
此外,最后,您需要以您想要的精度转换回十进制格式。在这种情况下,您可能会发现 float
和 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 中。您还需要考虑到数字常量是十进制格式,而不是数字。
此外,最后,您需要以您想要的精度转换回十进制格式。在这种情况下,您可能会发现 float
和 decimal
是等价的。