php数学函数结果错误输出

时间:2012-05-19 16:09:16

标签: php session math

我从雅虎财务中获取了白银的价值,并将当前价值增加了​​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>

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 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>

Click to run the code here

任何人都可以帮我解决这个问题..任何建议

3 个答案:

答案 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); ?>