Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server SQL Server为浮动提供了额外的精度?_Sql Server_Floating Point - Fatal编程技术网

Sql server SQL Server为浮动提供了额外的精度?

Sql server SQL Server为浮动提供了额外的精度?,sql-server,floating-point,Sql Server,Floating Point,精度损失是一回事,但精度增加 我有一个包含以下坐标的文本文件: 41.88694340165634 -87.60841369628906 当我将其粘贴到SQL Server Mgmt Studio表视图中时,结果如下: 41.886943401656339 -87.608413696289062 我在做梦吗?这怎么可能 我是从记事本上粘贴的,它是原始文本。如果我直接键入字符,也会出现同样的问题 sql server从何处获得额外精度?根据在线书籍: 浮点:用于浮点数字数据的近似数字数据

精度损失是一回事,但精度增加

我有一个包含以下坐标的文本文件:

41.88694340165634   -87.60841369628906
当我将其粘贴到SQL Server Mgmt Studio表视图中时,结果如下:

41.886943401656339  -87.608413696289062
我在做梦吗?这怎么可能

我是从记事本上粘贴的,它是原始文本。如果我直接键入字符,也会出现同样的问题


sql server从何处获得额外精度?

根据在线书籍:

浮点:用于浮点数字数据的近似数字数据类型浮点数据是近似值;因此,并非数据类型范围中的所有值都可以精确表示


强调我的。

我个人没有看到过这一点,但可能只是SQL server management studio显示了浮点的“表示”,即值将如何存储在数据库中。记住,无论如何,浮动都是近似值

它并没有增加精度,只是将其四舍五入到最接近的IEEE浮点表示形式。当你将其转换回十进制时,它看起来只是获得了精度。

你没有抓住问题的关键。它是增加精度,而不是减少精度。它可能从哪里得到额外的小数点?这只是把它们从天上拉出来。@Scott一个浮子不能准确地容纳41.88694340165634,所以浮子变得很接近,比如41.886943401656339。但这可以解释精度损失的现象,而不是精度相加。不是真的。正如@hova所指出的,它本身并不是精确的。这与浮点数的存储方式有关。由于41.88694340165634不能存储在浮点可用的位中,因此它存储最接近的avabilable表示。这里来看看浮点是如何内部表示的:假设一个假设的情况:假设1不能存储在一个假想的FLAOT的X位中。那我们怎么办呢?我们可以将最接近1的数字存储在flaot中,即0.99999或0.999或0.9或1.000001或其他类似近似值。这里重要的是,我们不是在提高精度,而是尽可能存储最接近1.0的值。因此,flaot是一种“近似”数据类型,与float相同。如果这些是地球大小的行星上的纬度和经度坐标,那么这些位置之间的距离约为1纳米。(也就是说,如果它对您的应用程序确实重要,@GMastros和@Hova都是正确的。)