将字符串转换为数字

时间:2013-09-02 05:55:28

标签: php string integer

这似乎是一个非常简单的问题,我在这里使用“0888”作为我的输入值示例。我已经研究了一段时间并尝试了不同的方法,例如

(int) "0888";
intval("0888");
floatval("0888");
settype("0888", "integer");

不幸的是,它们似乎都没有用。 参考1 参考2 参考3

$num = $_POST['postcode'];

if((1000 <= $num && $num <= 1999) || (2000 <= $num && $num <= 2599) || (2619 <= $num && $num <= 2898) || (2921 <= $num && $num <= 2999)){
    $state = "NSW";
}
elseif((0200 <= $num && $num <= 0299) || (2600 <= $num && $num <= 2618) || (2900 <= $num && $num <= 2920)){
    $state = "ACT";
}
elseif((3000 <= $num && $num <= 3999) || (8000 <= $num && $num <= 8999)){
    $state = "VIC";
}
elseif((4000 <= $num && $num <= 4999) || (9000 <= $num && $num <= 9999)){
    $state = "QLD";
}
elseif((5000 <= $num && $num <= 5799) || (5800 <= $num && $num <= 5999)){
    $state = "SA";
}
elseif((6000 <= $num && $num <= 6797) || (6800 <= $num && $num <= 6999)){
    $state = "WA";
}
elseif((7000 <= $num && $num <= 7799) || (7800 <= $num && $num <= 7999)){
    $state = "TAS";
}
elseif((0800 <= $num && $num <= 0899) || (0900 <= $num && $num <= 0999)){
    $state = "NT";
}
else {
    $state = "Can not find this postcode record";
}

如果我echo $state我希望看到NT,但实际上我看到“无法找到此邮政编码记录”。谁能告诉我这是什么问题?

3 个答案:

答案 0 :(得分:1)

0299是数字的octal notation,与十进制 299非常不同。实际上,9在八进制和{{{{}}中无效1}}只有值2.尝试0299,然后echo 0299;

如果你将邮政编码视为数字,你应该从中删除前导0并且不要在同伴中使用前导0:

echo 0123;

答案 1 :(得分:0)

使用trim然后ltrim为零,第二个参数允许使用你想要修剪的任何字符。

<?php
$num = $_POST['postcode'];
$num = ltrim( trim($_POST['postcode'], ' ') , '0'); //trim SPACES or ZERO

如果你确定数字在左边,你可以使用ltrim(

// Just to be sure, finally reconvert it to (int)
$num = (int) $num;

答案 2 :(得分:0)

intval默认会解析你的字符串基数为10,因此$num = intval("0888");会正确地将字符串解析为888.无需修剪。

然而,if语句中的integer literals被解释为八进制数。删除那里的前导零:

[...] elseif((800 <= $num && $num <= 899)  [...]