我有一个字符串$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
,因此你得到了一个空字符串。如果省略第三个参数,它将返回从第一个参数中给出的索引开始的子字符串,直到原始字符串的末尾。