2012-05-19 68 views
0

我從雅虎財經抓住銀的價值及其附加值0.10爲當前值..這正顯示出正確的結果..PHP數學函數導致錯誤的輸出

$yql_base_url = "http://query.yahooapis.com/v1/public/yql?"; 

$params = array(
    'q'  => 'select * from html where [email protected] and [email protected];', 
    'url' => 'http://finance.yahoo.com/q?s=XAGUSD%3DX&ql=1', 
    'xpath' => '//*[@id="yfs_g00_xagusd=x"]', 
    'env' => 'http://datatables.org/alltables.env', 
    'format' => 'json', 
); 

$yql_query_url = $yql_base_url . http_build_query($params); 

$session = curl_init($yql_query_url); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
$json = curl_exec($session); 
$phpObj = json_decode($json); 

if ($phpObj->query->count > 0) { 
    $price = $phpObj->query->results->span->content; 
} 
?> 
<div> <?php echo $price; ?> which is current value </div> 
<div><?php echo $price + .10; ?> where 0.10 is added</div> 

click to Run the code here

但是,當我嘗試黃金價格,結果顯示錯誤的輸出即1或2

$yql_base_url = "http://query.yahooapis.com/v1/public/yql?"; 

$params = array(
    'q'  => 'select * from html where [email protected] and [email protected];', 
    'url' => 'http://finance.yahoo.com/q?s=XAUUSD%3DX&ql=1', 
    'xpath' => '//*[@id="yfs_g00_xauusd=x"]', 
    'env' => 'http://datatables.org/alltables.env', 
    'format' => 'json', 
); 

$yql_query_url = $yql_base_url . http_build_query($params); 

$session = curl_init($yql_query_url); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
$json = curl_exec($session); 
$phpObj = json_decode($json); 

if ($phpObj->query->count > 0) { 
    $price = $phpObj->query->results->span->content; 
} 
?> 
<div> <?php echo $price; ?> which is current value</div> 
<div> <?php echo $price + .10; ?> where 0.10 is added</div> 

Click to run the code here

任何人都可以請幫我在這件事..任何建議

回答

3

銀的價值是28.7100 - 它可以轉換爲浮動數 - 這就是爲什麼添加0.10它的作品。

在另一方面,你對黃金的價值是1,597.2800 - 不能被轉換爲數字(注意',' - 這就是爲什麼加入0.10到這是行不通的。


您必須將該字符串轉換爲可以轉換爲浮點型的字符串,方法是刪除該字符串',';這可以用str_replace()做到:

$str = '1,597.2800'; 
$str = str_replace(',', '', $str); 

,然後,加入0.10把它變成可能:

var_dump($str + 0.10); 

會給:

float 1597.38 


之後,你就可以的當然重新格式化新的計算值。
您通常會想要使用number_format()函數,爲了做到這一點。

例如,你可以使用這樣的事情:

$str = '1,597.2800'; 
$str = str_replace(',', '', $str); 
$price = $str + 0.10; 
echo number_format($price, 2); 

而且你會得到下面的輸出:

1,597.38 
+0

好吧,我做了ka嘗試,它真的解決了..但我需要顯示的價格逗號分隔..即1597.28是用str_replace()所做的輸出;但我需要在div顯示1,597.28(我再次需要在要顯示的結果中添加逗號)..你可以請建議 –

+1

@coolnicq你可能會想要使用'number_format()'函數 - 我已經編輯了我的答案以包含一個示例,但請隨時查看它的手冊頁,以查看它接受的參數。 –

2

我不能現在執行的PHP代碼,但我認爲這是與您的數字格式的問題。

該號碼是1,597.2800。逗號,不是有效的字符,所以1,597.2800正在轉換爲1.然後,如果您有0.1,則它會給出1.1。

由於您的號碼首先被視爲字符串,因此在進行任何操作之前應刪除逗號。一個簡單的str_replace(',', '', $price);應該工作。

+0

是的,它只是一個用PHP字符串轉換爲整數的問題。你也可以將它轉換爲浮點數'$ number =(float)str_replace(',','',$ price);' – Xeoncross

1

的問題是在1,597逗號。 PHP不會將該字符串作爲數字。它停在逗號。

刪除逗號並將字符串轉換爲數字。

<?php echo floatval(str_replace(',','',$price)) + .10; ?>

,如果你喜歡,因爲+勢力隱式轉換可以去掉明確的數字轉換:

<?php echo str_replace(',','',$price) + .10; ?>

使用number_format()把逗號後面。該,2指定的小數號碼:您可能需要4

<?php echo number_format(floatval(str_replace(',','',$price)) + .10,2); ?>