首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql未保存正确的浮点值

Sql未保存正确的浮点值
EN

Stack Overflow用户
提问于 2019-06-03 21:05:07
回答 1查看 2.2K关注 0票数 0

我保存了某些物体的厚度、长度、宽度和坐标,所有这些值都是浮动的。

当我试图将它们保存到sql数据库中时,像39.888这样的值将保存为1.0000000。

我已经将sql列从double更改为float,但它没有更改任何内容。

这是我试图上传到数据库的代码。

代码语言:javascript
复制
INSERT INTO items (
  Cod, Date, TownHall, Parish, Place, 
  Epoch, RawMaterial, Description, Base, Technology, 
  Length, Width, Thickness, Latitude, Longitude, 
  Bibliography, Image) 
VALUES (
  1, '2019-05-17', 'Idanha-a-Nova', 'Ladoeiro', 'Oliveiras',
  'Idade do Bronze', 'Sílex', 'Indeterminado', 'Núcleo', 'Núcleo',
  2.9, 3.4, 0.8, 39.809484, -7.23707,
  'Apresenta Desgaste', @img)

1.000000000000和-1.00000000以正确的值显示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 21:25:01

首先,float是不可靠的,您应该使用DECIMAL(x,y)来存储坐标。

第二,即使在使用float时,定义float(x,x)也是不正确的。这基本上意味着在小数点分隔符之前有NO数字,x十进制数字之前也有。当尝试放置39.888时,您应该得到一个错误:

ERROR 1264 (22003) at line x: Out of range value for column 'Latitutde'

在某些配置中,这只是一个警告,它试图将数字放在最近允许的位置。那将是0.99999(9)-0.99999(9)。但是,由于浮动是不准确的,它将其读为1.0-1.0

它应该是float(x,y),其中x是允许的总位数,y是十进制数。

长话短说:

例如:使用DECIMAL(8,6),这样39.809484才能工作--它有8位总计,6小数位数。

通常,坐标应存储为:

DECIMAL(10, 8),因为它可以在-90到+90度的范围内

液化天然气- DECIMAL(11, 8)可在-180至+180度范围内

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56434514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档