【问题标题】:PHP int typecasting generating wrong value [closed]PHP int类型转换生成错误值[关闭]
【发布时间】:2012-12-16 04:15:19
【问题描述】:

我想将整数值存储在数据库中,并且为此我在 $_POST 值上使用 (int) 类型转换。但它评估另一个值而不是提交的整数。

echo (int)0444444;

输出

149796

请帮忙。

【问题讨论】:

  • 0444444 已经是一个整数了,强制转换在这里什么都不做;您只是选择用八进制(以 8 为基数)表示法,而不是更常见的十进制(以 10 为基数)表示法。
  • 请注意,您提到“在 $_POST 值上使用 (int) 类型转换”,但您的示例使用整数。 $_POST 值始终是字符串,除非您手动更改它们。
  • 好点,我没有注意到在示例中..但实际上我在使用 $_POST 上的 int 类型转换的表单处理中得到了奇怪的值。
  • 您已经编辑了您的问题 - 它现在具有完全不同的含义。在 32 位 PHP 中,最大 int 为 2147483647
  • 复习注:几分钟前我误解了编辑的原因,所以我也将我看到的原始内容与编辑一起放回原处。 (在评论中我们没有看到完整的历史记录。)对不起,我错了,回到伊恩的建议。问候。

标签: php type-conversion


【解决方案1】:

0 为整数加前缀意味着它应该被解释为一个八进制值,即以8为底而不是以10为底。

0444444 (OCT) = 149796 (DEC)

如果您想将字符串转换为整数,而不是强制转换,您可以使用intval(),它可以选择允许您指定基数 10。

虽然您的示例中的转换是从 int 到 int 的转换(0444444 已被解释为整数),但您的转换是无操作的。

【讨论】:

  • 谢谢但 echo intval('03894563333', 10);仍在评估另一个值...
  • @TPSstar 在 32 位 PHP 中,最大 int 为 2147483647
  • @TPSstar 由于您在 32 位平台上运行,最大可能的 int 值为 2147483647(PHP_INT_MAX 用于 32 位平台),转换在 64 位 PHP 上运行良好并返回预期的结果。如果您需要大于PHP_INT_MAX 的数字,则需要使用整数以外的其他数据类型。
【解决方案2】:

根据其他答案,0 前缀会导致 PHP 将值解释为八进制。

intval 函数可能正是您想要的。

【讨论】:

  • intval 也将其评估为八进制 :)
  • 你确定吗? print intval('04444444'); = 4444444。你总是可以像这样明确地声明基数 10:print intval('04444444',10);
  • echo intval('03894563333', 10);正在评估另一个值。
  • 在 32 位 PHP 中,最大 int 为 2147483647
【解决方案3】:

0 开头的值被视为八进制值。

【讨论】:

  • 谢谢,那么哪种类型转换会起作用?还是我需要使用 is_int() ?
  • @TPSstar:只需删除0
  • 但这仍然不是解决方案,我需要在任何情况下都可以工作的东西,即使是零:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多