float 和 real (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 中的 SQL 终结点 Microsoft Fabric 中的仓库 Microsoft Fabric SQL 数据库

用于表示浮点数值数据的大致数值数据类型。 浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。 real 的 ISO 同义词为 float(24) 。

Transact-SQL 语法约定

语法

float [ (n) ] 其中 n 为用于存储 float 数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小 。 如果指定了 n,则它必须是介于 1 和 53 之间的某个值 。 n 的默认值为 53 。

n 值 Precision 存储大小
1-24 7 位数 4 个字节
25-53 15 位数 8 字节

注意

SQL Server 将 n 视为下列两个可能值之一 。 如果 1<=n<=24,将 n 视为 24。 如果 25<=n<=53,将 n 视为 53。

SQL Server float[(n)] 数据类型从 1 到 53 之间的所有 n 值均符合 ISO 标准 。 double precision 的同义词是 float(53) 。

注解

数据类型 范围 存储
float -1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308 取决于 n 的值
real -3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38 4 个字节

浮点数和实际数据类型称为近似数据类型。 float 和 real 的行为遵循有关近似数值数据类型的 IEEE 754 规范。 若要了解 Microsoft Visual C (MSVC) 编译器如何使用 IEEE 754 标准,请参阅 IEEE 浮点表示形式

近似数值数据类型不存储为多个数字指定的确切值;它们存储值的近似值。 对于某些应用程序,指定值与存储近似值之间的微小差异并不相关。 不过,对其他人来说,区别很重要。 由于浮点数和实际数据类型的大致性质,因此在需要确切的数字行为时不要使用这些数据类型。 需要精确数值的示例包括财务或业务数据、涉及舍入或相等检查的操作。 在这些情况下,请使用整数、十进制、数字、货币或 smallmoney 数据类型。

避免在 WHERE 子句搜索条件中使用浮点列或实列,尤其是 = 和 <> 运算符。 最好将浮点数和实际列限制为 > 或 < 比较。

转换 float 和 real 数据

浮点数的值在转换为任何整数类型时将被截断。

如果要从 floatreal 转换为字符数据,使用 STR 字符串函数通常比 CAST() 更有用。 原因是 STR() 可以更好地控制格式设置。 有关详细信息,请参阅 STR (Transact-SQL)函数 (Transact-SQL)

在进行 SQL Server 2016 (13.x) 之前,浮点值到 decimal 或 numeric 的转换仅限于精度为 17 位数字的值 。 小于 5E-18 的任何浮点值(使用 5E-18 的科学计数法或 0.000000000000000005 十进制表示法设置时)都舍入为 0。 从 SQL Server 2016 (13.x) 起,不再具有该限制。