2013-04-03 21 views
1

$ VAL代表我的SQL如何用點數管理數值?

$sold = 50; 
    if ($val>$sold){ 
    echo "true"; 
    } 
    else 
    { 
    echo "false"; 
    } 

我得到假1,949.58。不知何故50大於1,949.58,這是因爲','的標誌。我需要一些關於如何管理這項權利的建議。 Thx

+0

順便說一句,你是如何將你的$ val值存儲在數據庫中的?我的意思是什麼數據類型? – 2013-04-03 23:46:41

+0

@MarCejas:如果它檢索到逗號,那麼它就是字符串類型之一(varchar/char)。 – NotMe 2013-04-04 00:01:02

+1

@ChrisLive耶,我知道。我只是仔細檢查,爲什麼他在varchar中存儲數字?建議將這些存儲爲雙倍。 – 2013-04-04 02:31:16

回答

0

$val被php解釋爲字符串。進行比較時,它正在進行字符串比較,所以你不會得到你期望的結果。

您需要強制它們成爲浮點類型。看看http://php.net/manual/en/function.floatval.php具體是關於該功能的評論。

像這樣的東西應該工作

function floatvalue($value) { 
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,2}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value)); 
} 
0

您需要將這些值轉換爲浮動,而不是字符串。現在你正在做字符串比較而不是數字比較。以下內容將這些字符串轉換爲浮動值。

$val = parseFloat('1,949.58'.replace(/\,/g,"")) 
$sold = parseFloat('50') 

.replace在解析爲Float之前從原始字符串中刪除「,」。