【问题标题】:cast a number from string to int would change the value in php将数字从字符串转换为 int 会改变 php 中的值
【发布时间】:2012-06-01 01:12:54
【问题描述】:

我正在使用 PHP 开发一个项目,并尝试使用 $_POST 中的参数之一,不幸的是,我想将结果发送到 Web 服务,该服务只接受整数形式的参数。所以我必须用(int) 转换类型,但这项工作会改变参数的值 例如它是这样的:

$o =  4924869620;
$c = (int) $o;

那么 c 的值为 629902324

为什么会发生这种情况?我怎样才能保持价值不变?我也用过intval(),它也会改变值

【问题讨论】:

  • 如何将此值传递给 Web 服务?
  • 该值将溢出 32 位整数。这就是它改变的原因。例如尝试“10”,它不会改变。
  • 通过使用SoapClient库,但问题不存在,我将变量放入数组中,然后我打印数组,看到值发生了变化,这都是在将参数发送到webservice之前
  • 没错,只要网络服务接受这个数字。我认为溢出可能存在问题,有什么建议将数字保持为数字吗?

标签: php string casting integer


【解决方案1】:

我猜你在 32 位系统上运行,这意味着最大 int 将是 4294967295 类型将其转换为 float instad:

$c = (float) $o;

【讨论】:

    【解决方案2】:

    整数范围从 -2.147.483.648 开始,到 2.147.483.647 结束 - 您的数字大于最大范围。请改用其他数据类型,例如浮点数。

    浮点数的范围从 1.5E-45 开始到 3.4E38 ;o)

    【讨论】:

    • 我怎样才能保持这个数字,例如长,但不幸的是 PHP 没有长
    • 你可以使用float,只要写$c = (float) $o;相反;o)
    【解决方案3】:

    您的数字大于允许的整数。尝试将其转换为浮点数或双精度数。

    【讨论】:

    • 您可以发布您正在使用的代码吗?我刚刚在我的系统上测试了它,它工作正常。 <?php $x = 4924869620; echo gettype($x)."\n"; echo (double) $x."\n"; echo (int) $x."\n"; echo (float) $x."\n"; ?>double 4924869620 629902324 4924869620
    【解决方案4】:

    您应该尝试将其作为浮点数发送。如果那不可能,您可以发送一个整数数组吗? (如果是这样,您可以将您的数字拆分为 4 字节的块,并能够创建一个存储这些值的数组,而另一方面您将能够基于该数组重新构建数字)

    【讨论】:

      【解决方案5】:

      如上(float) $o;,因为 4924869620 不是整数。但是,如果您要发布到服务器,那么数据类型是否不相关,只是它只是数字数据,因为它只是一个发送的 url 编码字符串......

      【讨论】:

        猜你喜欢
        • 2012-05-23
        • 1970-01-01
        • 2016-09-28
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多