2012-07-20 25 views
2

我有号码2.50存储在一个变量$price我可以传递给一个函数,它识别值2.50然而,当我尝试和它乘以2我得到的答案4。我认为PHP截断了原始值,然后我认为它可能会将它解释为字符串,因为我正在从XML文档中获取值,但manual表示如果它是字符串,它将正确识别它为2.50。如果任何人都可以阐明这一点,我会非常感激。PHP中的数学错误 - 数字截断?

编辑:下面的代码我using-

$Price = new Prices(); 

// Traverse XML document 
foreach ($simpleXML->product as $product) { 

    // Gather info from the product array 
    $price = $product->price; 
    $type = $product->type; 
    $price = $Price->getRealPrice($price, $type); 
} 

function getRealPrice($price, $type) { 
    // echo $price returns 2.50 

    // Switch statement on type 
    case 'Keychain': 
     return 1.7 * $price; // This returns 3.4 
     break; 
} 

即3.4被返回是真正的问题的事实,就好像它是做2 * 1.7即使它应该是2.5;我在原始示例中选择了2.5 * 2,因为看到问题更明显。

更新: 我做1.8 * $price之后,如果我赞同$pricedouble投我得到这个:2.503.6这两个点有点反常我出去......

+9

你能显示代码吗? – ghbarratt 2012-07-20 21:22:44

+0

我不确定,但是您是否试图获取变量'$ price'的类型。正如@ghbarratt所说的,你能告诉我们吗? – Elwi 2012-07-20 21:30:01

+0

@ghbarratt我编辑了我的问题以显示代码 – 2012-07-20 21:43:51

回答

2

通过在函数的开头使用floatval这个字符串解析为浮点

function getRealPrice($price, $type) { 
    $price = floatval($price); 
+0

一个简单的演员也可以工作。铸造实际上似乎是解决这个问题的正式方法,这很奇怪。 [阅读此](http://php.net/manual/fr/ref.simplexml.php#78683) – ghbarratt 2012-07-20 22:33:05

+0

@ghbarratt,以及我不会说这是一个问题。我完全同意投射/解析应留给用户,我不知道返回的值是一个对象,我认为它是一个String(在进行算术运算时将被视为一个浮点数)。 – Adi 2012-07-20 22:39:50

+0

我不是说'floatval'是错的。我大部分都惊讶于SimpleXMLElement类中没有(或者说没有)可用于执行此操作而不需要强制转换或'floatval'的东西。 – ghbarratt 2012-07-20 22:45:12

0

这是一种野生的猜测,但你应确保值为'2.50'而不是'2,50'。