我从雅虎财务中获取了白银的价值,并将当前价值增加了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>
任何人都可以帮我解决这个问题..任何建议
答案 0 :(得分: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
答案 1 :(得分:2)
我现在无法执行PHP代码,但我认为这是您的数字格式的问题。
号码为1,597.2800
。逗号,
不是有效字符,因此1,597.2800正在转换为1.如果你有0.1,则结果为1.1。
由于您的号码首先被视为字符串,因此您应该在执行任何操作之前删除逗号。一个简单的str_replace(',', '', $price);
应该有用。
答案 2 :(得分: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); ?>