Sql 实数和浮点数十进制长度和精度
我明白: 用于浮点数字的近似数字数据类型 数据。浮点数据是近似的;因此,并不是所有的值都在 可以准确地表示数据类型范围 但是,在以下示例中: Q1:为什么“浮点(24)”(即real)比“浮点(53)”给出的小数更多,但精确度更低 Q2:我如何将@s存储在数字字段中,因为它没有舍入Sql 实数和浮点数十进制长度和精度,sql,sql-server,Sql,Sql Server,我明白: 用于浮点数字的近似数字数据类型 数据。浮点数据是近似的;因此,并不是所有的值都在 可以准确地表示数据类型范围 但是,在以下示例中: Q1:为什么“浮点(24)”(即real)比“浮点(53)”给出的小数更多,但精确度更低 Q2:我如何将@s存储在数字字段中,因为它没有舍入 declare @s varchar(50) = '34.770438199999944' select convert(float(24), @s) real_, convert(float(53), @s) fl
declare @s varchar(50) = '34.770438199999944'
select convert(float(24), @s) real_, convert(float(53), @s) float_
(括号用于使差异更加清晰)
问题1。这只是一个显示问题,对于其他数字可能会有所不同。它将在更适合的地方取整(它将更接近数字的真实近似值)。精度较低,因为用于存储数字的数据较少
问题2。在mssql(如标签所述sql server)中,您可以生成一个十进制数,并且您将在不丢失精度的情况下存储该数字。但是您可以存储的数字是有限的。您能解释一下
精度较低的原因吗,因为它在中存储数字的数据较少?是关于浮动的还是真实的。。每一个数字,无论是浮点数还是非浮点数,都表示在一个位数上。例如,1字节=8位。它可以容纳从0到255的数字(2^8个数字)。如果使用2字节的数字,则会有2^16,以此类推。对于浮点,推理是类似的,但数字不是按原样存储的,而是事实上存储为两个数字:有效数字和指数。有了这个2,你可以近似得到一个很大的数字范围。现在,float和real用不同的字节数表示。Float有更多的字节来存储其中的两个数字,可以更准确地保存数据。
| real_ | float_ |
------------------------------------
| 34.77043(9147949) | 34.77043(82) |