Intereting Posts
Система комментариев PHP с ответом 1 уровня. Проблема с отображением запроса WordPress Permalinks никогда не работает на localhost Ubuntu 12.10 Как перенаправить или показать страницу, а не «Запрещено», когда у меня отключены списки каталогов (htaccess / unix) Как отправить форму входа в ASP.NET с помощью PHP / cURL? Корзина WooCommerce – Переменная динамической цены переходит в пользовательский ценовой крючок WooCommerce: функция, возвращающая все идентификаторы продукта в определенной категории Лучший класс изображений изображений PHP Как эхо-массив Перенаправление PHP не работает на сервере Часовой пояс базы данных Zend Framework 2: передача переменных («параметры») для формирования с помощью formelementmanager Где я могу разместить общий код библиотеки в Symfony 2? Отправка электронной почты через почту PHP медленная Назначение массива php путем копирования значения или ссылки? Внутренняя ошибка сервера на php submit с командами MySQL

Проверьте, является ли число десятичным

Мне нужно проверить 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()