2017-03-14 52 views
0

美好的一天,PHP貨幣與XML - 錯誤結果

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

我有一個「產品價格」和「標記」,我想制定一個「總價」,但它給了我不正確的結果。

例: 「總價」= 「產品價格」 *「標記

我有以下代碼

<?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

請問你能幫我一下,因爲它給出了錯誤的總價格

+0

有效地考慮到它可能是因爲你改變'$ product_price'的值爲一個字符串。 – Toxide82

+0

@ÁlvaroGonzález我認爲OP已經修復了在線腳本,所以現在編輯的問題其實包含正確的結果... – ewcz

+0

@ewcz Dammit ... –

回答

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),t因爲str_replace(" ", "", $product_price)這個陳述對它沒有影響,所以你只有在數千(即在這種情況下,"28 999"*1.15產生28*1.15)......

+0

美好的一天,感謝您的快速回復。我已經改變它,它仍然給我相同的結果 –

+0

@AndreHoffmann它呢?我只是試圖執行腳本,它似乎工作...你可以嘗試更新正則表達式? – ewcz

+0

非常感謝。我知道它與第二個合作。你的男人。希望你有一個美好的一天。 Tanx一百萬 –