【问题标题】:Wrong simple calculation in PHPPHP中错误的简单计算
【发布时间】:2014-01-19 12:41:21
【问题描述】:

我想用 PHP 执行一个非常简单的计算,但是我得到了错误的结果。

我的计算:20.66 * 1.21(= 大约 25),PHP 给出:24.20。我将1.21 更改为2,得到40...所以PHP 告诉我20.66 x 2 = 40。当我回显$resultaat 时,它给出了20.66 的正确值。 (我从 XML 文件中获取了 20.66 值)

我在这里和其他地方搜索了“错误的 PHP 计算”,但找不到类似的错误。有什么想法吗?

我的代码:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://URL'); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, '25');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$content = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($content);
$resultaat = $xml->Balance;
$resultaat2 = $resultaat * 1.21;
$resultaat3 = round($resultaat2, 2);

echo $resultaat3;

【问题讨论】:

  • 你能告诉我们var_dump($resultaat);吗?
  • 24.20 / 1.21 = 20,完全正确。我建议您从 XML 文件中读取的值是 20,而不是您认为的 20.66。您可能会遇到与this previous question 相同的SimpleXML 问题,其中包含浮动值的SimpleXML 对象通过计算自动转换为int。也许尝试 $resultaat = (float) $xml->Balance; 而不是将 SimpleXML 对象分配给 $resultaat
  • var_dump($resultaat); --> object(SimpleXMLElement)#7 (1) { [0]=> string(5) "20.66" }
  • @MattGibson 在 cmets 中给出了正确答案,$resultaat = (float) $xml->Balance; 而不是 $resultaat = $xml->Balance; 正在工作。
  • 我现在没有时间做出正确的回答!随意接受任何给出正确答案的人:)

标签: php xml math curl


【解决方案1】:

$xml->Balance 返回一个 SimpleXmlElement。 将其转换为双倍。改变这一行

$resultaat = $xml->Balance;

到这里

$resultaat = (double)$xml->Balance;

【讨论】:

    【解决方案2】:

    $resultaat 是 SimpleXMLElement,不是字符串或数字。似乎该类的类型杂耍返回一个整数值。如果您将类型转换为 double 它将起作用。这是一个例子。

    <?php
    
    $xml = "<xml><value>20.66</value></xml>";
    $xmlObj = simplexml_load_string($xml);
    var_dump($xmlObj->value); //shows the type
    var_dump($xmlObj->value * 2); // 40
    var_dump((double)$xmlObj->value * 2); //41.32
    

    我希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2015-01-28
    相关资源
    最近更新 更多