存储在MySQL中的浮点值不断变得混乱

std*_*err 1 mysql floating-point rounding

我正在尝试在MySQL中存储浮点值,我的值似乎一直在搞乱.:(
我将我的字段定义为,float(10,7)并在插入之前在PHP中正确地舍入我的值:

$rndval = round($val,7)
INSERT INTO mytable (float) VALUES ($rndval)
Run Code Online (Sandbox Code Playgroud)

但是当我插入一个47.5206797之类的值时,它在我的表中显示为47.520679 5.这是为什么?

Sim*_*tal 5

如果您需要一个精确的值,请将其存储为精确的数据类型,例如DECIMAL(17,7),它将提供相同的范围FLOAT(10,7).唯一DECIMAL的缺点是它将占用比等效物更多的磁盘空间FLOAT,但是与校正精度是一个问题的浮点误差相比,这是微不足道的.

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