遇到格式不正确的数值 - 这是什么意思



打开通知时,我有以下消息标记:

注意:遇到格式不正确的数值

这是否意味着预期的值不是一个简单的整数?引用的行显示如下:

$per = ($raw>0?ceil((($raw/$cast)/5)*100):0).'%';

要重现:

var_dump("14" / "3 votes");

(演示(

。打印自 PHP/7.1 以来的警告:

注意:在/in/8dsH7 中遇到的格式不正确的数值 第 3
行 浮点数(4.6666666666667(

因此,他们显然添加了新的检查以防止错误。

带数字的数学是可靠且定义明确的。带有任意文本的数学不是。或者,你认为这有意义吗:

var_dump("pink" * "apples");

int(0(

您参加混淆代码竞赛还是什么? :-D .我无法重现通知消息,但是如果您将代码拆分为单独的行,也许您会发现公式的哪个部分导致消息。

为什么要检查是否$raw > 0?如果$raw为零,那么无论如何$per最终都会为零。

如果您试图避免除以零错误,那么您需要检查$cast,而不是$raw

$per = 0;
if ($cast > 0) {
    $per = ($raw / $cast) / 5 * 100;
}
$per .= "%";

作为最后的注释,从这段代码片段中,不清楚为什么你除以五。这只是一个神奇的数字。将其设为常量或变量会更清楚;至少,发表评论它是什么。

祝你好运!

非常感谢您的评论,但是在以全新的眼光看待此内容之后,我能够进一步查看代码,并且我意识到发生了什么。

如上所述,我转储了 $raw 和 $cast 的值,它们返回为:

string(2) "14" string(7) "3 votes"

很明显,"3票"应该是一个数字,否则计算将不起作用。我看了看上面的一行,上面写着:

$cast = (get_post_meta($id, '_kksr_casts', true)?get_post_meta($id, '_kksr_casts', true):'0').' votes';

宾果游戏。我删除了结尾的"投票"输出,只留下了数字。消息消失了。不过,我仍然希望输出原始文本,所以我发现 606 之后的下一行包含以下内容:

$row = $avg . ' (' . $per . ') ' . $cast;

所以我只是在此行的末尾添加了"投票",这导致 WP Admin 中的正确输出,并且错误现在消失了。

似乎已修复,并创建了一个拉取请求。谢谢你们所有的帮助。

最新更新