我正在保存某些对象的厚度,长度和宽度以及坐标,所有这些值都是浮点数。
当我尝试将它们保存到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的正确值
答案 0 :(得分:4)
首先,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位小数。
通常,坐标应存储为:
lat-DECIMAL(10, 8)
,因为它可以在-90至+90度范围内
lng-DECIMAL(11, 8)
,因为它的范围可能在-180到+180度之间