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它不起作用的原因。


您必须通过删除该字符串将该字符串转换为可以转换为浮点数的字符串',';这可以通过以下方式完成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 回答