我保存了某些物体的厚度、长度、宽度和坐标,所有这些值都是浮动的。
当我试图将它们保存到sql数据库中时,像39.888这样的值将保存为1.0000000。
我已经将sql列从double更改为float,但它没有更改任何内容。
这是我试图上传到数据库的代码。
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以正确的值显示。


发布于 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度范围内
https://stackoverflow.com/questions/56434514
复制相似问题