在我的商店中,我试图将一个字符串更改为一个整数,我正在使用的代码是:
<?php echo $_excl; ?>
<?php $int_excl = intval($_excl);?>
<?php var_dump ($int_excl);?>
当i var_dump $int_excl
表示值为0时应为4.99。
我做错了什么?
var_dump ($_excl)
返回string(33) "£4.99"
答案 0 :(得分:1)
floatval
和intval
方法都开始从字符串的开头查找数字(删除前面的空格) - 并停止查看不能作为数字一部分的第一个符号。在你的情况下,它是第一个 - £
。这就是为什么intval
只返回0(如floatval
那样)。
解决此问题的一种方法是使用preg_replace
删除字符串开头的所有非数字符号:
$excl = '£4.99';
$value = preg_replace('/^\D+/u', '', $excl);
var_dump(intval($value)); // int(4)
var_dump(floatval($value)); // float(4.99)
Demo。这种方法具有变化抗性 - 如果£
被$
或任何其他货币符号替换,或者完全删除,则可以(无需任何修改)。
答案 1 :(得分:0)
您正在解析浮点值,因此需要floatval()
PHP Float Manual。
如果intval()
返回0,则表示转换失败。资料来源:PHP Intval)
在您的情况下,转换失败,因为字符串不是以数字开头,而是使用货币符号。
这可以解决您的问题:
<?php
echo $_excl;
$int_excl = floatval(ltrim($_excl, '£'));
var_dump ($int_excl);
?>
(ltrim
删除第一个字符,如果它是£
)
答案 2 :(得分:0)
<?php
$_excl = '4.99' ;//assuming
echo $_excl;
$int_excl = floatval($_excl);
var_dump ($int_excl);
?>
使用上面的代码,因为$ _excl = 4.99这是一个浮点值,intval()将返回4.
答案 3 :(得分:0)
这应该适合你:
(您必须从字符串中删除字符£
)
<?php
$_excl = "£4.99";
$_excl = str_replace("£", "", $_excl);
$int_excl = floatval($_excl);
var_dump ($int_excl);
?>
输出:
float(4.99)