Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 实数和浮点数十进制长度和精度_Sql_Sql Server - Fatal编程技术网

Sql 实数和浮点数十进制长度和精度

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

我明白:

用于浮点数字的近似数字数据类型 数据。浮点数据是近似的;因此,并不是所有的值都在 可以准确地表示数据类型范围

但是,在以下示例中:

Q1:为什么“浮点(24)”(即real)比“浮点(53)”给出的小数更多,但精确度更低

Q2:我如何将@s存储在数字字段中,因为它没有舍入

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) |