【问题标题】:Why am I getting INF when dividing small numbers in PHP为什么在 PHP 中除小数时会得到 INF
【发布时间】:2019-03-29 12:23:37
【问题描述】:

我在一个数据库中有两个表。每个都有一个列 (varchar255) 和一个小数字 (0-30)。我只是想将这两者分开,结果如下:
如果一列的数字为 6,575,而另一列的数字为 1,291,则等式应为 5,09。它输出 6。其他/大多数结果输出 INF

数字来自数据库中的 foreach 循环,这是图片中的代码:

echo $row["ton"]." - ".$row_w["weight"]." - ".$row["ton"] / $row_w["weight"]."<br>";

我尝试了 bcdiv 并且没有输出任何内容并且 is_infinite = 1。我错过了什么?

【问题讨论】:

  • 3,932 / 0,979 永远不是5.09
  • 您在将连接与数学运算混合时遇到问题。这将起作用:echo $row["ton"]." - ".$row_w["weight"]." - ".($row["ton"] / $row_w["weight"])."&lt;br&gt;";
  • 抱歉,号码/错别字
  • 尝试将值转换为 int()
  • 数字中的逗号把它扔掉了。您需要从数字中删除逗号或将它们转换为句点,然后才能将它们分开

标签: php divide inf


【解决方案1】:

在进行除法之前,您需要使用 floatval 将值(字符字符串)转换为浮点数。

inf 表示结果是无限的,因为您将除以 0 或一个非常小的数字,这是由于将字符处理为浮点数时产生的意外值,因为程序无法正确理解小数方式。

例子:

$var = '578.23';

$float_value_of_var = floatval($var);

您的代码可能是这样的(仅作为指示):

echo $row["ton"]." - ".$row_w["weight"]." - ".floatval($row["ton"]) / floatval($row_w["weight"])."<br>";

【讨论】:

    【解决方案2】:

    感谢@aynber/@Ash-b 看到我存储错误的值。

    $a = str_replace(",", ".", $row["ton"]);
    $b = str_replace("," ,".", $row_w["weight"]);
    
    echo $row["ton"]." - ".$row_w["weight"]." - ".$a / $b."<br>";
    

    。而不是,

    无法设置评论来回答,但案例已解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多