【问题标题】:PHP Convert number with leading zeros to stringPHP将带前导零的数字转换为字符串
【发布时间】:2018-11-01 15:54:21
【问题描述】:

我一直无法找到解决 PHP 中整数到字符串转换这一方面的问题,所以...
我有一个文件,其中一个字段包含一些长度为 3、4 或 5 位的数字 我需要将所有数字标准化为 4 位。
如果数字是 123、1234、12345,那么为了标准化,我在第一个后面添加一个零,对第二个不做任何事情,对第三个进行舍入:round(12345/10) 到目前为止,一切都很好。问题是该文件包含一些带有重要前导零的数字 023、0234、02346。
我需要保留前导零,我希望输出为 0230、0234、0235 我想我可以强制该字段为字符串,如果第一个字符为零,则删除它,对剩余的数字进行计算,然后将数字左填充为带有前导零的字符串
当我尝试将带有前导零的数字转换为字符串时,该问题的前导零似乎被解释为指示该数字是八进制的。
strval(0123) > 83
(字符串)0123 > 83

我的任务是通过编辑源数据文件来用散列替换任何前导零,这样该字段就变成了一个字符串。然后我的过程变成:如果该字段以#strip it开头,则进行计算,然后在前面加上一个零。当然有更好的解决方案,也许是另一种读取文件的方法?我正在使用 fgetcsv

【问题讨论】:

  • 您需要向我们展示您使用的代码没有按照您希望的方式运行。
  • 我没有看到问题。当我从文件中读取数字字符串时,它会转换为整数 ok - $x = '0123'; var_dump((int)$x); -> 123。我看不到在你的情况下八进制表示发生在哪里。请向我们展示代码。
  • 将 12345 更改为 1235 进行格式化听起来不正确。我希望这些不是重要的数字。

标签: php string integer


【解决方案1】:

我会在你的数字中添加下一个最大的数字,即 1 后跟零,例如

0672 --> +1000

得到 1672

然后,将其转换为字符串,并将位置 1 的字符再次更改为零。

这就是我的方式...我对 PHP 还很陌生,所以可能有一个更复杂的答案,但如果一切都失败了,它可以工作。

【讨论】:

    【解决方案2】:

    您可以使用以下代码

    $yourInt = 253;
    $intWithZeros = sprintf("%05d", $yourInt); // result 00253
    

    您可以在"%05d" 中更改更改值5 的字符数

    【讨论】:

    • 如果数字以0开头,这将失败!
    • @HamzaAbdaoui 我认为这是两个单独的问题。将 0 前导字符串解析为 int 似乎不是问题(请参阅@Roman Hocke)。这个答案似乎可以输出 0 填充。
    • @RolandStarke,目前还不清楚 OP 的要求是什么,但如果输入是以00 开头的Intintval(00253) 将给我们171
    • @HamzaAbdaoui 我认为输入是一个字符串,所以八进制符号 00253 在这里不应该是一个问题。如inval('00253')(int) '00253' 给出正确的数字。
    猜你喜欢
    • 2020-05-25
    • 2017-04-09
    • 2019-12-03
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多