PHP条带字符串,转换为整型


PHP Strip String, Convert to int

我有一个字符串$special,它的格式像£130.00,也是一个ex TAX(VAT)价格。

我需要去掉第一个字符,这样我可以运行一些简单的加法。

$str= substr($special, 1, 0);  // Strip first char '£'
echo $str ;                    // Echo Value to check its worked
$endPrice = (0.20*$str)+$str ; // Work out VAT

当我在第二行回显时,我没有收到任何值?我还需要将字符串转换为整数以运行加法吗?

感谢马特

+ + +更新

谢谢你的帮助,我拿了你的代码,并添加了一些我自己的,有可能更好的方法来做到这一点,但它的工作:)我发现,如果价格低于1000将看起来像£130.00,如果价格是一个较大的价值,它将包括一个休息。ie£1400 .22 .

$str = str_replace('£', '', $price);
$str2 = str_replace(',', '', $str);
$vatprice = (0.2 * $str2) + $str2;
$display_vat_price = sprintf('%0.2f', $vatprice);
echo "£";
echo $display_vat_price ;
echo " (Inc VAT)";

再次感谢Matt

您不能以当前的方式使用substr。这是因为您正在尝试删除£字符,这是一个两字节的unicode字符,但是substr()不是unicode安全的。您可以像这样使用$str = substr($string, 2),或者更好的str_replace():

$string = '£130.00';
$str = str_replace('£', '', $string);
echo (0.2 * $str) + $str; // 156

原始回答

我将保留这个版本,因为它仍然可以提供一些见解。如果£不是一个2字节的unicode字符,答案将是OK的。知道了这一点,你仍然可以使用它,但你需要在偏移量2而不是1开始子字符串。


你使用substr是错误的。应该是:

$str = substr($special, 1);

检查文档,第三个参数将是子字符串的长度。你通过了0,因此你得到了一个空字符串。如果省略第三个参数,它将返回从第一个参数中给出的索引开始的子字符串,直到原始字符串的末尾。