【问题标题】:PHP: Variable is int but can't perform calculationPHP:变量是 int 但无法执行计算
【发布时间】:2010-10-18 12:03:39
【问题描述】:
$bal = (int)$balance;
echo is_int($bal);

$balance 来自 file_get_contents($webservice);

我正在使用 (int) 将字符串转换为整数。 is_int 返回 1 表示 true 作为验证。

因为 $bal 的值总是负数,所以我做了以下计算使其成为正数:

$bal = $bal * -1;

当我这样做时,即使 $bal 以前可能是 -150,该值也会变为 0。

编辑 1 var_dump ($balance) 正在返回: 字符串(110)“ -399.6000"

EDIT 2 我已经使用 XML Parser 将变量分配给数组 - 请参阅下面的答案。

【问题讨论】:

  • 这不是答案,但为什么不使用abs() 而不是乘以-1。有一天$bal 可能不会总是是负面的。
  • @Jason: 也看看评论 #1 ;-)
  • 虽然你确实应该使用abs,但提供的代码并没有错,如果$bal==-150 & -1==-1,它不会给你0。更有可能是有一些垃圾在$balance(货币符号、HTML 标签、空格等)中,这会阻止它被转换为所需的 INT。如果无法识别数字,正常处理会将其强制转换为 0。
  • @baswoni: string(110) " -399.6000" 不会计算,如果您在浏览器中查看,请查看源代码,而不是网页,因为-399.6000 有 远少于 110 个字符。

标签: php int isinteger


【解决方案1】:

如果您想确保始终处理正数,我推荐 PHP 的 abs()-function

$bal = abs($bal);

【讨论】:

  • 执行此操作时返回 0。
  • 问题是我的数据不好。 var_dump ($balance) = string(110) "-399.6000"
  • @baswoni:如果你使用intval()(可能与trim()有关)会发生什么?
  • 你错过了 abs-call 中的 $-sign ;) / @baswoni:如果你不只是复制和粘贴,你应该注意到他的错......
  • @oezi:谢谢你的提示;)
【解决方案2】:

根据您的var_dump 输出,您的字符串以空格开头。使用这个:

$bal = intval(trim($balance));

【讨论】:

  • 多了一个空格,一个空格不占其他100个缺失字符:)
  • @Wrikken:没错!我猜他的反应是:“哦,他们不需要看到所有这些垃圾;我会把它排除在外。”
【解决方案3】:

问题是我使用 file_get_contents 与 Web 服务的 GET 方法进行交互。

这是返回的 XML 标头数据,我在分配给变量时忽略了这些数据。

为了清除 XML 以保留我想要的值,我使用了 PHP XML_PARSER,它将 file_get_contents 存储到一个数组中,并允许我将数组值分配给一个整数。

$result = file_get_contents($base);

$p = xml_parser_create();
xml_parse_into_struct($p, $result, $vals, $index);
xml_parser_free($p);  
$bal = $vals[0]['value'];
echo $bal *-1;

【讨论】:

    【解决方案4】:

    如果你想恢复标志,试试这个:

    $bal = $bal * (-1);
    

    如果您希望它始终是积极的,请使用abs()

    $bal = abs($bal);
    

    【讨论】:

      【解决方案5】:

      【讨论】:

        【解决方案6】:
        $balance="-150";
        $bal = $balance*1;
        echo $bal;
        

        给出 -150

        【讨论】:

        • ... 与问题无关 - 那是关于乘以 -1。
        【解决方案7】:

        在你做乘法之后,你的程序用 $bal 做什么?以下 PHP 脚本在我的笔记本电脑上按预期工作:

        <?php
        $balance = "-150";
        $bal = (int)$balance;
        echo is_int($bal);
        $bal = $bal * -1;
        echo $bal;
        ?>
        

        输出是“1150”,因为我没有打扰换行符。你能发布更多你的代码吗

        【讨论】:

          【解决方案8】:

          我认为您可以通过使用返回任何变量的整数值的函数 intval() 来简化计算。如果您有 php 手册,请仔细阅读函数说明。

          【讨论】:

          • (int)$var & intval($var) 是等价的。
          猜你喜欢
          • 2015-07-19
          • 1970-01-01
          • 2016-12-28
          • 2020-03-20
          • 2015-01-04
          • 2019-09-03
          • 1970-01-01
          • 1970-01-01
          • 2016-12-19
          相关资源
          最近更新 更多