2012-02-22 76 views
1

我试图在MySQL中存储浮点值,我的值似乎不断变得混乱。 :(
我有我的领域定义为float(10,7),我将他们之前已正确一轮PHP我的价值观:存储在MySQL中的浮点值不断被搞乱

$rndval = round($val,7) 
INSERT INTO mytable (float) VALUES ($rndval) 

但是当我插入值,例如47.5206797,它显示为47.520679 我表,这是为什么?

+0

请张贴栏是如何在表中定义。 PHP中的所有“浮动”应该等同于其他语言中的“双倍”。 – paulsm4 2012-02-22 23:59:38

+0

如上所述:type float(10,7) – cerr 2012-02-23 00:00:56

回答

5

如果您需要的值要精确,它存储为一个确切的数据类型,如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

+0

不错,是的,这正是诀窍!谢谢西蒙! :) – cerr 2012-02-23 00:12:25

+0

@cerr:请注意,在'DECIMAL(10,7)'中,您只能将值从“999.9999999”存储到“+ 999.9999999”。根据MySQL的设置,如果你试图存储一个不适合的值(比如'1267.3') – 2012-02-23 00:30:07

+0

,我猜想FLING(10,7)可能需要DECIMAL(17, 7)。我将删除数据存储点,因为我对数字没有信心。如果我是正确的,但DECIMAL需要9个字节,而FLOAT需要4个字节。 – 2012-02-23 00:32:59