我试图在MySQL中存储浮点值,我的值似乎不断变得混乱。 :(
我有我的领域定义为float(10,7)
,我将他们之前已正确一轮PHP我的价值观:存储在MySQL中的浮点值不断被搞乱
$rndval = round($val,7)
INSERT INTO mytable (float) VALUES ($rndval)
但是当我插入值,例如47.5206797,它显示为47.520679 我表,这是为什么?
我试图在MySQL中存储浮点值,我的值似乎不断变得混乱。 :(
我有我的领域定义为float(10,7)
,我将他们之前已正确一轮PHP我的价值观:存储在MySQL中的浮点值不断被搞乱
$rndval = round($val,7)
INSERT INTO mytable (float) VALUES ($rndval)
但是当我插入值,例如47.5206797,它显示为47.520679 我表,这是为什么?
如果您需要的值要精确,它存储为一个确切的数据类型,如DECIMAL(17,7)
,这将提供相同的范围FLOAT(10,7)
。唯一的缺点是,DECIMAL
会占用然而,比等效的FLOAT
更多的磁盘空间与纠正浮点错误相比,s是微不足道的,因为浮点错误是精度问题。
http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html
有关浮点数问题的详细信息,下面可能是值得一读
http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
不错,是的,这正是诀窍!谢谢西蒙! :) – cerr 2012-02-23 00:12:25
@cerr:请注意,在'DECIMAL(10,7)'中,您只能将值从“999.9999999”存储到“+ 999.9999999”。根据MySQL的设置,如果你试图存储一个不适合的值(比如'1267.3') – 2012-02-23 00:30:07
,我猜想FLING(10,7)可能需要DECIMAL(17, 7)。我将删除数据存储点,因为我对数字没有信心。如果我是正确的,但DECIMAL需要9个字节,而FLOAT需要4个字节。 – 2012-02-23 00:32:59
请张贴栏是如何在表中定义。 PHP中的所有“浮动”应该等同于其他语言中的“双倍”。 – paulsm4 2012-02-22 23:59:38
如上所述:type float(10,7) – cerr 2012-02-23 00:00:56