Мне нужно проверить PHP, если пользователь вводил десятичное число (путь в США с десятичной точкой: X.XXX)
Любой надежный способ сделать это?
Вы можете получить большую часть того, что вы хотите от is_float , но если вам действительно нужно знать, имеет ли он в себе десятичное число, ваша функция выше не очень далеко (хотя и неправильный язык):
function is_decimal( $val ) { return is_numeric( $val ) && floor( $val ) != $val; }
Если все, что вам нужно знать, есть ли десятичная точка в переменной, то это выполнит работу …
function containsDecimal( $value ) { if ( strpos( $value, "." ) !== false ) { return true; } return false; }
Это не очень элегантное решение, но оно работает со строками и поплавками.
Обязательно используйте! == и не! = В тесте strpos или вы получите неверные результаты.
другой способ решить эту проблему: preg_match('/^\d+\.\d+$/',$number);
🙂
Функция, которую вы опубликовали, – это просто не PHP.
Посмотрите на is_float
[docs] .
Изменить: я пропустил часть «пользовательское значение». В этом случае вы можете использовать регулярное выражение:
^\d+\.\d+$
если вы хотите «10,00», чтобы вернуть истинный запрос «Ночной совы»
Если вы хотите узнать, имеет ли значение десятичное значение значение, вы можете использовать этот ответ.
Работает со всеми типами типов (int, float, string)
if(fmod($val, 1) !== 0.00){ // your code if its decimals has a value } else { // your code if the decimals are .00, or is an integer }
(fmod(1.00, 1) !== 0.00) // returns false (fmod(2, 1) !== 0.00) // returns false (fmod(3.01, 1) !== 0.00) // returns true (fmod(4.33333, 1) !== 0.00) // returns true (fmod(5.00000, 1) !== 0.00) // returns false (fmod('6.50', 1) !== 0.00) // returns true
fmod
возвращает остаток с плавающей запятой (по модулю) деления аргументов (следовательно, (! == 0.00))
Оператор модуля – почему бы не использовать оператор модуля? Например ($val % 1 != 0)
Из документов PHP :
Операнды модуля преобразуются в целые числа (путем удаления десятичной части) перед обработкой.
Это эффективно уничтожает цель op, на других языках, таких как javascript, вы можете использовать оператор модуля
Мне передали строку, и мне хотелось знать, была ли она десятичной или нет. Я закончил с этим:
function isDecimal($value) { return ((float) $value !== floor($value)); }
Я провел кучу теста, включая десятичные и десятичные знаки с обеих сторон от нуля, и, похоже, он работал.
$lat = '-25.3654'; if(preg_match('/./',$lat)) { echo "\nYes its a decimal value\n"; } else{ echo 'No its not a decimal value'; }
я использую это:
function is_decimal ($price){ $value= trim($price); // trim space keys $value= is_numeric($value); // validate numeric and numeric string, eg, 12.00, 1e00, 123; but not -123 $value= preg_match('/^\d$/', $value); // only allow any digit eg, 0,1,2,3,4,5,6,7,8,9. This will eliminate the numeric string, eg, 1e00 $value= round($value, 2); // to a specified number of decimal places.eg, 1.12345=> 1.12 return $value; }
Это более терпимый способ справиться с этим при вводе пользователя. Это регулярное выражение будет соответствовать как «100», так и «100.1», но не допускает отрицательных чисел.
/^(\d+)(\.\d+)?$/
is_numeric
возвращает true
для десятичных знаков и целых чисел. Поэтому, если ваш пользователь лениво входит в 1
вместо 1.00
он все равно вернет true
:
echo is_numeric(1); // true echo is_numeric(1.00); // true
Возможно, вы захотите преобразовать целое число в десятичное число с помощью PHP или позволить вашей базе данных сделать это за вас.
// if numeric if (is_numeric($field)) { $whole = floor($field); $fraction = $field - $whole; // if decimal if ($fraction > 0) // do sth else // if integer // do sth } else // if non-numeric // do sth
Полностью cludge .. но эй это работает!
$numpart = explode(".", $sumnum); if ((exists($numpart[1]) && ($numpart[1] > 0 )){ // it's a decimal that is greater than zero } else { // its not a decimal, or the decimal is zero }
Простейшим решением является
if(is_float(2.3)){ echo 'true'; }
Если вы работаете с проверкой формы. Затем в этом случае отправьте строку. Я использовал следующий код для проверки ввода любой формы – десятичное число или нет. Надеюсь, это сработает и для вас.
function is_decimal($input = '') { $alphabets = str_split($input); $find = array('0','1','2','3','4','5','6','7','8','9','.'); // Please note: All intiger numbers are decimal. If you want to check numbers without point "." then you can remove '.' from array. foreach ($alphabets as $key => $alphabet) { if (!in_array($alphabet, $find)) { return false; } } // Check if user has enter "." point more then once. if (substr_count($input, ".") > 1) { return false; } return true; }
Возможно, попробуйте также изучить это
!is_int()