Мне нужно проверить PHP, если пользователь ввел десятичное число (путь в США с десятичной точкой: X.XXX)
Любой надежный способ сделать это?
Мне нужно проверить 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';
}
i использую это:
function is_decimal ($price){
$value= trim($price); // trim space keys
$value= is_numeric($value); // validate numeric and numeric string, e.g., 12.00, 1e00, 123; but not -123
$value= preg_match('/^\d$/', $value); // only allow any digit e.g., 0,1,2,3,4,5,6,7,8,9. This will eliminate the numeric string, e.g., 1e00
$value= round($value, 2); // to a specified number of decimal places.e.g., 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
Общая сумма... но эй это работает!
$numpart = explode(".", $sumnum);
if ((exists($numpart[1]) && ($numpart[1] > 0 )){
// it 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()