мне нужно проверить в PHP, если пользователь ввел десятичное число (США путь, с десятичной точкой: x.xxx)Проверьте число десятичного
Любого надежным способом сделать это?
мне нужно проверить в PHP, если пользователь ввел десятичное число (США путь, с десятичной точкой: x.xxx)Проверьте число десятичного
Любого надежным способом сделать это?
Вы можете получить большую часть того, что вы хотите от is_float, но если вы действительно нужно знать, имеет ли он десятичной в нем, ваша функция выше ISN «т очень далеко (хотя и на другом языке):
function is_decimal($val)
{
return is_numeric($val) && floor($val) != $val;
}
Как работает '$ val% 1'? –
@ Феликс Хау ... Наверное, это не так. В Python и ECMAScript это лучший способ справиться с этим. Я поменял его на что-то более универсальное. – cwallenpoole
Я просто этого не видел раньше, но он всегда возвращался «0» для меня (в PHP). +1 для обновленного :) –
Функция, которую вы опубликовали, - это просто не PHP.
Посмотрите на is_float
[docs].
Редактировать: Я пропустил часть «введенная пользователем». В этом случае вы можете использовать регулярное выражение:
^\d+\.\d+$
Это проверяет только тип номера, а не содержимое. Поэтому 'is_float ('1.14')' возвращает false. – Ikke
@Ikke: О, я могу поклясться, что это было просто тестирование номера ... –
Ну, он говорит о введенном пользователем номере, что, скорее всего, является строкой. Поэтому его сначала нужно преобразовать в число. – Ikke
Я прошел строку, и хотел бы знать, если это была десятичная или нет. Я закончил с этим:
function isDecimal($value)
{
return ((float) $value !== floor($value));
}
Я провел кучу испытаний, включая десятичные дроби и не-десятичных знаков по обе стороны от нуля, и это, казалось, работало.
этот метод неверно возвращает false, когда у вас есть float, например, 0.0000 – 10us
$ value = '23 .43fg '; ???? –
Если все, что вам нужно знать, существует ли десятичная точка в переменной, то это будет получить работу ...
function containsDecimal($value) {
if (strpos($value, ".") !== false) {
return true;
}
return false;
}
Это не очень элегантное решение, но оно работает со строками и плавает.
Обязательно используйте! == и не! = В тесте strpos или вы получите неверные результаты.
Может быть, поищите в этом, а
!is_int()
Это более терпеть способ справиться с этим с пользовательским вводом. Это регулярное выражение будет соответствовать как «100», так и «100.1», но не допускает отрицательных чисел.
/^(\d+)(\.\d+)?$/
is_numeric
возвращает true
десятичных знаков и чисел. Так что если ваш пользователь лениво входит 1
вместо 1.00
он будет возвращать true
:
echo is_numeric(1); // true
echo is_numeric(1.00); // true
Вы можете преобразовать целое число в десятичной системе с PHP, или пусть ваша база данных сделать это для вас.
$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, 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;
}
это потрясающе спасибо. – cartalot
// 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
, если вы хотите «10.00" , чтобы вернуться верно проверить ответ Night Совы
Если вы хотите знать, если десятые имеет значение, которое вы можете использовать этот ответ.
Работает со всеми видами типов (целое, с плавающей точкой, строки)
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))
MODULUS оператор - почему бы не использовать модуль оператора? Например. ($val % 1 != 0)
От PHP docs:
Операнды модуля преобразуются в целые числа (путем удаления десятичной части) перед обработкой.
, который будет эффективно разрушает оп цель, и на других языках, как Java-вы можете использовать оператор модуля
Всего 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;
}
Это не определение функции PHP. –
Это ActionScript, а не PHP. – Ikke
Это не PHP. – red