为什么MySQL会以科学记数法返回一些浮点数,而不是其他浮点数?

时间:2012-07-24 08:54:32

标签: php mysql floating-point

我正在编写一个PHP脚本来查看浮点值的数据库表,这些数据库往往有点小,例如:

0.00052
0.00134
0.00103
0.00149
0.00085
0.00068
0.00077
0.00088
0.00169
0.00063

由于我不知道的原因,某些值以科学计数法出现在数据库中,例如:

1.12305e-06

该表设置为float,我已经尝试了PHP中的各种函数来强制数字显示为十进制,但无济于事。尽我所能,我无法在所有情况下都将这个数字表始终保持十进制。

有关如何解决此问题的任何建议?尝试过使用(float)和使用number_format()以及其他几个选项进行排版,但每次都没有变化。

2 个答案:

答案 0 :(得分:2)

CLI显示的内容似乎有六位数限制(可能在其他地方)。你拥有的例子是1.12305e-06,它是0.00000112305,显示为0.00000 - 虽然它显然不是零。

如果您坚持使用浮点数或双打,则必须使用round(columnName,5)之类的方法强制它们强制显示十进制值。否则,可能会切换到decimnal数据类型。

来自http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

由于浮点值是近似值而未存储为精确值,因此尝试在比较中将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的影响。有关更多信息,请参见第C.5.5.8节“Problems with Floating-Point Values

另请参阅mysql论坛上有关此确切问题的thread

答案 1 :(得分:0)

在我的案例中,解决方案在数据库中从浮点数变为十进制类型,所以感谢Romain的评论让我看到了这个解决方案!