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

Как проверить, является ли строка плавающей точкой?

Я передаю параметр с именем value. Я хотел бы знать, является ли значение float. До сих пор у меня есть следующее:

if (!isNaN(value))
{
    alert('this is a numeric value but not sure if it is a float.');
}

Как я могу сделать еще один шаг и преобразовать строку в значение, которое может быть оценено с помощью float?

4b9b3361

Ответ 1

Вот так:

if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
    alert('this is a numberic value and I\'m sure it is a float.');
}​

Ответ 2

Вы можете использовать функцию parseFloat.

Если переданное значение является float, функция возвращает значение, иначе оно вернет NaN.

Что-то вроде:

val = parseFloat(val);
if(isNaN(val))
    alert("not a float!");

Ответ 3

Следующие функции также проверяют формат. Например. JavaScript native parseInt и parseFloat функции также анализируют строки, содержащие нецифровые символы, а вышеприведенные функции имеют последствия этого.

// For example, following code will work
var n = parseInt('123asd');
n == 123

Эти функции вернут false для такой строки.

function isFloat(val) {
    var floatRegex = /^-?\d+(?:[.,]\d*?)?$/;
    if (!floatRegex.test(val))
        return false;

    val = parseFloat(val);
    if (isNaN(val))
        return false;
    return true;
}

function isInt(val) {
    var intRegex = /^-?\d+$/;
    if (!intRegex.test(val))
        return false;

    var intVal = parseInt(val, 10);
    return parseFloat(val) == intVal && !isNaN(intVal);
}

Ответ 4

Number.prototype.isFloat = function() {
    return (this % 1 != 0);
}

Тогда вы можете

var floatValue = parseFloat("2.13");
var nonFloatValue = parseFloat("11");

console.log(floatValue.isFloat()); // will output true
console.log(nonFloatValue.isFloat()); // will output false

Значения типа 2.00 не могут рассматриваться как float в JS, или, скорее, каждое число - это float в JS.


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

Ответ 5

Чтобы проверить, является ли строка целым числом или float

function isFloat(n) {
    return parseFloat(n.match(/^-?\d*(\.\d+)?$/))>0;
}

//alert(isFloat("3.444"));

Ответ 6

Чтобы проверить, является ли строка плавающей точкой (избегайте значений int)

function isFloat(n) {
   if( n.match(/^-?\d*(\.\d+)?$/) && !isNaN(parseFloat(n)) && (n%1!=0) )
      return true;
   return false;
}

var nonfloat = isFloat('12'); //will return false
var nonfloat = isFloat('12.34abc'); //will return false
var float = isFloat('12.34'); //will return true

Ответ 7

Я написал функции, которые принимают строки, целые числа и float

function isInt(x) {
    return !isNaN(x) && eval(x).toString().length == parseInt(eval(x)).toString().length
}

function isFloat(x) {
    return !isNaN(x) && !isInt(eval(x)) && x.toString().length > 0
}

Пример вывода:

console.log(isFloat('0.2'))  // true
console.log(isFloat(0.2))    // true
console.log(isFloat('.2'))   // true
console.log(isFloat('-.2'))  // true
console.log(isFloat(-'.2'))  // true
console.log(isFloat(-.2))    // true
console.log(isFloat('u.2'))  // false
console.log(isFloat('2'))    // false
console.log(isFloat('0.2u')) // false

console.log(isInt('187'))  // true
console.log(isInt(187))    // true
console.log(isInt('1.2'))  // false
console.log(isInt('-2'))   // true
console.log(isInt(-'1'))   // true
console.log(isInt('10e1')) // true
console.log(isInt(10e1))   // true

Ответ 8

Если вам нужно проверить значение int или float:

function isFloatOrInt(n) {
    return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}

Ответ 9

прямо:

if (parseFloat(value).toString() === value.toString()) {
    ...
}

Ответ 10

В моем случае очень простое регулярное выражение выполнило трюк.

Мне нужно было проверить вход пользователя, является ли вход действительным денежным значением. Я просто использовал -

/^[0-9]+(\.)?[0-9]*$/.test(number)

все между // - это регулярное выражение.

/^ означает, что совпадение начинается с начала слова, а $/ означает, что совпадение заканчивается словом. Если вы считаете, что слово не может начинаться с буквы 0, тогда выражение будет выглядеть как [1-9][0-9]*

[0-9]+ означает, что слово должно начинаться по крайней мере с одного числа.

Примечание: * означает ноль или более, + означает один или несколько, а ? означает один или ничего.

Здесь выражение /^[1-9][0-9]*$/, и это будет проверять только целые числа.

Чтобы проверить период (.) в числе, нам нужно использовать \. с выражением. . - специальный символ, который соответствует всем, \. будет соответствовать периоду.

Наконец, еще один класс символов [0-9]* будет соответствовать нулю или более цифрам.

Тест-тесты

/^[0-9]+(\.)?[0-9]$/.test("21.38a") // ==> false
/^[0-9]+(\.)?[0-9]$/.test("21.38") // ==> true
/^[0-9]+(\.)?[0-9]$/.test("y2781.68") // ==> false
/^[0-9]+(\.)?[0-9]$/.test("2781r.68") // ==> false

Ответ 11

function checkFloat(value) {
    let parsed = Number.parseFloat(value);
    return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}

Ответ 12

Используйте это:

var isNumber = /^\d+\.\d+$/.test(value);

Ответ 13

Только если value передано в виде строки, мы можем полностью определить, использует ли она десятичную точку или нет. Поскольку 1.0 (как число) приводит к 1, хотя "1.0" (как строка) приводит к тому, что "1.0" точно такой же. И оттуда мы можем найти, если он содержит десятичную точку, .. Поэтому нам нужно передать аргумент value в виде строки.

Следующее будет работать, если value - строка

if ( value.indexOf('.') > -1 ) { // value is a floating point

}

value.toString() не превратит 1.0 в "1.0" (скорее, он просто превратит его в 1), так что передача по строке является лучшей альтернативой, поскольку она поддерживает все ее символы.

Если вы не хотите использовать строку, то нет возможности захватить 1.0 как значение с плавающей запятой. Используйте следующее, если вы хотите проверить число, является значением с плавающей запятой:

Следующие действия не будут работать для 1.0, 1.00 и т.д.

if ( value >>> 0 !== x ) { // value is a floating point

}

Примечание. Вы также должны проверить !isNaN(value) (я оставил это, чтобы сфокусироваться на изменениях).

Ответ 14

Эта функция возвращает числовое значение строки независимо от того, являются ли int или float

function getNumericVal(str) {
    if(isNaN(str)) return;
    try {return parseFloat(str);} 
    catch(e) {return parseInt(str);}
}

Ответ 15

используйте этот код jquery

    <script>
    $(document).ready(function () {
        $(".allow_only_float").keypress(function (e) {

            if (e.which != 46 && e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
                e.preventDefault();//return false;
            }
            var avg = $('#<%=txtAverage.ClientID%>').val();
            var idx = avg.indexOf(".");
            if (idx > -1 && e.which == 46) {
                e.preventDefault();//return false;
            }
        });
    });
    </script>
<body>
    <input type='text' class='allow_only_float'>
</body>