2012-05-19 3 views
0

I 야후 금융에서 실버의 값을 잡고, 오른쪽 결과를 도시한다 .. 전류 값에 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> 

보여줍니다

174,173,210은 사람이 어떤 제안

답변

3

은의 값은 28.7100입니다. 이는 부동 소수점 숫자로 변환 할 수 있습니다. 따라서이 값에 0.10을 추가하면됩니다. 한편

, 당신은 금을 얻는 값은 1,597.2800입니다 -에 0.10 작동하지 않는 추가하는 이유 - 숫자 합니다 ( ','주의)로 변환 할 수있다.


','을 제거하여 해당 문자열을 float로 변환 할 수있는 문자열로 변환해야합니다. 그것을 가능하게 0.10에 추가 한 후,

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

을 그리고 :이 str_replace() 수행 할 수 있습니다

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

로 바꿀 수 있습니다. 나는 카를 시도했는데 실제로 효과가있었습니다.하지만 가격을 보여줄 필요가 있습니다. 쉼표로 분리. 즉, 1597.28은 str_replace(); 하지만 나는 div에 1597.28을 보여줄 필요가있다. (나는 다시 표시 할 결과에 쉼표를 추가해야한다.) –

+1

@coolnicq을 제안 해 주시겠습니까? 아마도 number_format() 함수를 사용하고 싶을 것입니다. 예제를 포함하도록 내 대답을 편집했지만 수동 페이지에서 어떤 매개 변수를 받아들이는지 자유롭게 살펴보십시오. –

2

내가 지금 PHP 코드를 실행할 수 아니에요 ..이 문제에 좀 도와 주시겠습니까,하지만 난 그것이 당신의 숫자 형식의 문제라고 생각합니다.

숫자는 1,597.2800입니다. 쉼표 ,은 유효한 문자가 아니므로 1,597.2800이 1로 변환됩니다. 그런 다음 0.1이 있으면 결과로 1.1이됩니다.

숫자가 먼저 문자열로 처리되므로 작업을 수행하기 전에 쉼표를 제거해야합니다. 간단한 str_replace(',', '', $price);을 사용해야합니다.

+0

가 네, PHP는 문자열을 정수로 변환과 단지 문제입니다 수 있습니다. 또한 float'$ 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); ?>