Ответ 1
Вот так:
if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
alert('this is a numberic value and I\'m sure it is a float.');
}
Я передаю параметр с именем value. Я хотел бы знать, является ли значение float. До сих пор у меня есть следующее:
if (!isNaN(value))
{
alert('this is a numeric value but not sure if it is a float.');
}
Как я могу сделать еще один шаг и преобразовать строку в значение, которое может быть оценено с помощью float?
Вот так:
if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
alert('this is a numberic value and I\'m sure it is a float.');
}
Вы можете использовать функцию parseFloat.
Если переданное значение является float, функция возвращает значение, иначе оно вернет NaN.
Что-то вроде:
val = parseFloat(val);
if(isNaN(val))
alert("not a float!");
Следующие функции также проверяют формат. Например. 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);
}
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.
Чтобы проверить, является ли строка целым числом или float
function isFloat(n) {
return parseFloat(n.match(/^-?\d*(\.\d+)?$/))>0;
}
//alert(isFloat("3.444"));
Чтобы проверить, является ли строка плавающей точкой (избегайте значений 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
Я написал функции, которые принимают строки, целые числа и 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
Если вам нужно проверить значение int или float:
function isFloatOrInt(n) {
return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}
прямо:
if (parseFloat(value).toString() === value.toString()) {
...
}
В моем случае очень простое регулярное выражение выполнило трюк.
Мне нужно было проверить вход пользователя, является ли вход действительным денежным значением. Я просто использовал -
/^[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
function checkFloat(value) {
let parsed = Number.parseFloat(value);
return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}
Используйте это:
var isNumber = /^\d+\.\d+$/.test(value);
Только если 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)
(я оставил это, чтобы сфокусироваться на изменениях).
Эта функция возвращает числовое значение строки независимо от того, являются ли int или float
function getNumericVal(str) {
if(isNaN(str)) return;
try {return parseFloat(str);}
catch(e) {return parseInt(str);}
}
используйте этот код 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>