使用XML的PHP​​货币 - 结果不正确

时间:2017-03-14 09:08:55

标签: php html xml math

美好的一天,

我想知道你是否可以帮助我?

我有“产品价格”和“加价”我想制定一个“总价”,但它给我的结果不正确。

示例:“总价”=“产品价格”*“标记

我有以下代码。

<?php 
$markup      = 1 + (15 / 100);
$url         = "http://nanobug.co.za/feed/stock-file/Stock-File-New.xml";
$xml         = simplexml_load_file($url);
foreach ($xml->product as $item)
{
    $product_code  = $item->code;
    $product_price = $item->price;
    $product_price = str_replace("R", "", $product_price);
    $product_price = str_replace(" ", "", $product_price);
    $total_price   = $product_price * $markup;
    echo "Product Price: ".$product_price."<br>";
    echo "Markup: ".$markup."<br>";
    echo "Equation: Total Price = Product Price * Markup<br>";
    echo "Total Price: ".$total_price."<br><br>";
}
?>

查看结果的链接:View Results

查看xml文件的链接:View XML

你可以帮我,因为它给出了不正确的总价。

1 个答案:

答案 0 :(得分:2)

我建议use

$product_price = preg_replace('~[ \x{00a0}]~siu', '', $product_price);

而不是

$product_price = str_replace(" ", "", $product_price);

原因是您的xml文件如下所示:

grep price *.xml | head -n1 | hexdump -C

00000000  20 20 20 20 3c 70 72 69  63 65 3e 52 20 32 38 c2  |    <price>R 28.|
00000010  a0 39 39 39 2e 30 30 3c  2f 70 72 69 63 65 3e 0d  |.999.00</price>.|
00000020  0a                                                |.|
00000021

即,作为千位分隔符的空间不是普通空间,而是non-breaking space(如上所示的UTF-8中的C2 A0),因此str_replace(" ", "", $product_price)语句具有对它没有影响,因此你实际上只考虑了数千(即,在这种情况下"28 999"*1.15产生28*1.15)......