来自数据库的浮点数错误

时间:2013-12-11 08:38:39

标签: php mysql

我将浮点数指定为0.1,然后使用php echo将其呈现给浏览器,它的值为1.77175e-07。

可能导致这种奇怪发生的原因是什么?

//Set reward
$reward = 0.1;

$question_result = mysql_query("SELECT question, answer, timelimit FROM trivia_questions ORDER BY RAND() LIMIT 1");
$question_array = mysql_fetch_array($question_result);
$question = $question_array['question'];
$answer = $question_array['answer'];
$timelimit = $question_array['timelimit'];

//Send response
echo "question,".$question.",".$answer.",".$reward.",".$timelimit.",".$question." (".$reward."L$ Reward)";

1 个答案:

答案 0 :(得分:1)

这应该是一个评论 - 但它太长了。

我认为其他评论员试图解释大多数计算机不存储十进制浮点数 - 它们被更改为二进制并在需要时再返回 - 这可能导致一些舍入错误(例如0.1可能变为0.1000013342。 ..)但是0.1和0.000000177175之间存在巨大差异,转换错误。

问题的标题意味着您认为从数据库中检索的数字不正确 - 但您显示的代码不会将0.1写入数据库 - 您也不会指示如何检索它,也不会显示类型存储它的数据库字段。

如果PHP和/或mysql无法在没有任何可靠性的情况下处理浮点数,我认为现在有人会注意到 - 你的代码中有一个错误。

检查数据库上的数据类型。检查您是否插入浮点值(未引用)。使用其他客户端从数据库中检索值。

在问题中查看代码非常有帮助 - 但是很容易省略重要内容并包含许多不相关的内容。下次尝试创建一个最小的脚本来复制问题(例如,在这种情况下 - 将值插入表中并检索该值的情况)。你可能希望有一个Google用于E.S.Raymond的“如何以聪明的方式提问”。