0

yahoo Financeからシルバーの値を取得し、現在の値に0.10を追加しました。正しい結果を示しています。

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

$params = array(
    'q'      => 'select * from html where url=@url and xpath=@xpath;',
    '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>

ここでコードを実行するにはクリックしてください

しかし、金価格でそれを試してみると、結果は間違った出力、つまり1または2を示しています

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

$params = array(
    'q'      => 'select * from html where url=@url and xpath=@xpath;',
    '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>

ここでコードを実行するには、ここをクリックしてください

誰かがこの問題で私を助けてくれますか..何か提案

4

3 に答える 3

2

現在、PHPコードを実行できませんが、数値形式の問題だと思います。

番号は1,597.2800です。カンマ,は有効な文字ではないため、1,597.2800は1に変換されます。次に、0.1の場合、結果として1.1になります。

数値は最初は文字列として扱われるため、操作を行う前にコンマを削除する必要があります。単純なものが機能するstr_replace(',', '', $price);はずです。

于 2012-05-19T16:16:04.080 に答える
2

銀の値は28.7100-浮動小数点に変換できます-これが銀への追加0.10が機能する理由です。

一方、金で得られる値は1,597.2800-数値に変換できません(に注意してください',' -そのため、金に追加0.10しても機能しません。


その文字列を削除して、floatに変換できる文字列に変換する必要があり','ます。これは次の方法で実行できます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
于 2012-05-19T16:18:07.817 に答える
0

問題は。のコンマです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); ?>

于 2012-05-19T16:24:29.540 に答える