2016-01-26 34 views
0

我想計算一個運輸價格。Floatvalue總是浮動(0)

  • 1項收費2.50€
  • 2-10項4,5€
  • 10+項*(的 項/ 10號)4.5€

我的代碼:

$item_count = self::getItemCount(); 
    if($item_count == 1){ 
     $vsk = 2.5; 
    } 
    else if($item_count > 1 && $item_count <= 10){ 
     $vsk = 4.5; 
    } 
    else{ 
     $vsk = ceil($item_count/10) * 4.5; 
    } 
    var_dump($item_count); 
    var_dump($vsk); 

$item_count包含在車中的商品的數量,並得到我的正確值。但$vsk一個vardump總是float(0);

一些例子:

string(3) "(1)" float(0) 
string(3) "(4)" float(0) 

你看到我的錯誤(縣)?

編輯:

arkascha注意到getItemCOunt返回一個字符串。 我cahnge代碼:

$item_count = intval(self::getItemCount()); 

現在我得到:

int(0) float(0) 

所以我的項目數,方法似乎是錯誤的。

public static function getItemCount() 
{ 
    self::$items = session::getArray('cart'); 
    $amount = 0; 
    foreach (self::$items as $i) { 
     $amount += $i; 
    } 
    return ($amount > 0) ? '(' . $amount . ')' : ''; 
} 
+5

如果我解釋你的輸出是正確的,那麼'$ item_count'包含文字字符串「(1)」。這不是一個數字,所以沒有什麼可以用來進行計算。你首先必須注意從它提取數字值(所以「1」而不是「(1)」),其次你必須將它轉換爲數字,也許使用'intval(...)'。 – arkascha

+1

更好的是,修正getItemCount()方法,以便它實際返回一個計數。 – jeroen

+0

感謝您的回答。我現在得到了一個int val,它用'$ item_count = intval(self :: getItemCount());'但是float仍然是0,像'int(0)float(0)' – osanger

回答

2

我看到太多的括號有:

string(3) "(1)" 

如果你投,爲int,它成爲0(這是字符串(1),不1!),而且fawls所有後續計算。你需要返回一個「1」,一個字符串或一個int(php是鬆散類型的,記住),並且如果你想更確定的將它轉換爲int()。

消除$item_count中的那些括號,即使self::getItemCount()僅返回數字。如果你不能以任何理由,只是之後刪除它,像$item_count = str_replace(['(',')'], '', self::getItemCount()),bu最好的行動方式將是返回一個數字