2013-04-03 2 views
1

$ Вэл представляет 1,949.58 из моего SQLКак управлять номерами с точками?

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

Я получаю ложь. как-то 50 больше, чем 1949,58, и это из-за знака ','. Мне нужны советы о том, как управлять этим правом. Thx

+0

BTW, как вы сохранили свои значения $ val в БД? Я имею в виду, какой тип данных? –

+0

@MarCejas: если в нем есть запятая, когда он его извлекает, то это один из типов строк (varchar/char). – NotMe

+1

@ ChrisLive Да, я знаю. Я просто дважды проверю, и почему он сохранил номера в варчаре? Также рекомендуется хранить их в двух экземплярах. –

ответ

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

.............................

Смежные вопросы