Подтвердить что ты не робот

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

Мне нужно проверить PHP, если пользователь ввел десятичное число (путь в США с десятичной точкой: X.XXX)

Любой надежный способ сделать это?

4b9b3361

Ответ 1

Вы можете получить большую часть того, что вы хотите от is_float, но если вам действительно нужно знать, имеет ли он в себе десятичное число, ваша функция выше не очень далеко (хотя и неправильный язык):

function is_decimal( $val )
{
    return is_numeric( $val ) && floor( $val ) != $val;
}

Ответ 2

Если вам нужно знать, существует ли десятичная точка в переменной, то это выполнит работу...

function containsDecimal( $value ) {
    if ( strpos( $value, "." ) !== false ) {
        return true;
    }
    return false;
}

Это не очень элегантное решение, но оно работает со строками и плаваниями.

Обязательно используйте! == и не!= в тесте strpos или вы получите неправильные результаты.

Ответ 3

другой способ решить эту проблему: preg_match('/^\d+\.\d+$/',$number);:)

Ответ 4

Функция, которую вы опубликовали, просто не PHP.

Посмотрите is_float [docs].

Изменить: Я пропустил часть "введенное пользователем". В этом случае вы можете использовать регулярное выражение:

^\d+\.\d+$

Ответ 5

если вы хотите, чтобы "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, вы можете использовать оператор модуля

Ответ 6

Мне была передана строка, и мне хотелось знать, была ли она десятичной или нет. Я закончил с этим:

function isDecimal($value) 
{
     return ((float) $value !== floor($value));
}

Я провел кучу теста, включая десятичные и десятичные знаки с обеих сторон от нуля, и, похоже, он работал.

Ответ 7

$lat = '-25.3654';

if(preg_match('/./',$lat)) {
    echo "\nYes its a decimal value\n";
}
else{
    echo 'No its not a decimal value';
}

Ответ 8

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;
}

Ответ 9

Это более терпимый способ справиться с этим при вводе пользователя. Это регулярное выражение будет соответствовать как "100", так и "100.1", но не допускает отрицательных чисел.

/^(\d+)(\.\d+)?$/

Ответ 10

is_numeric возвращает true для десятичных знаков и целых чисел. Поэтому, если ваш пользователь лениво входит 1 вместо 1.00, он все равно вернет true:

echo is_numeric(1); // true
echo is_numeric(1.00); // true

Возможно, вы захотите преобразовать целое число в десятичное число с помощью PHP, или пусть ваша база данных сделает это за вас.

Ответ 11

   // 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

Ответ 12

Общая сумма... но эй это работает!

$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
}

Ответ 13

Самое простое решение -

if(is_float(2.3)){

 echo 'true';

}

Ответ 14

Если вы работаете с проверкой формы. Затем в этом случае отправьте строку. Я использовал следующий код для проверки ввода любой формы - десятичное число или нет. Я надеюсь, что это тоже сработает для вас.

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;
}

Ответ 15

Возможно, попробуйте также изучить это.

!is_int()