Valueというパラメーターを渡します。値がfloatかどうかを知りたい。これまでのところ、私は以下を持っています:
if (!isNaN(value))
{
alert('this is a numeric value but not sure if it is a float.');
}
さらに一歩進んで、文字列を浮動小数点数に評価できるものに変換するにはどうすればよいですか?
このような:
if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
alert('this is a numeric value and I\'m sure it is a float.');
}
ParseFloat関数を使用できます。
渡された値がfloatの場合、関数は値を返します。それ以外の場合、NaNを返します。
何かのようなもの:
val = parseFloat(val);
if(isNaN(val))
alert("not a float!");
次の関数もフォーマットをチェックします。例えば。 JavaScriptのネイティブ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);
}
文字列が整数か浮動小数点かを確認するには
function isFloat(n) {
return parseFloat(n.match(/^-?\d*(\.\d+)?$/))>0;
}
//alert(isFloat("3.444"));
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
のような値は、実際にはJSではフロートと見なすことはできません。むしろJSではすべての数値がフロートですです。
これを使って:
var isNumber = /^\d+\.\d+$/.test(value);
私の場合、非常に単純な正規表現がトリックを行いました。
入力が有効な金額かどうかをユーザーの入力を検証する必要がありました。私は単純に
/^[0-9]+(\.)?[0-9]*$/.test(number)
//
の間のすべてが正規表現です。
/^
は、一致がWordの先頭から始まることを意味し、$/
は一致がWordで終了することを意味します。 Wordが文字0
で開始できないと思う場合、式は[1-9][0-9]*
のようになります。
[0-9]+
は、Wordが少なくとも1つの数字で始まる必要があることを意味します。
注:*
はゼロ以上を意味し、+
は1つ以上を意味し、?
は1つ以上を意味します。
ここまでの式は/^[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
文字列がフロートかどうかを確認するには(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
function checkFloat(value) {
let parsed = Number.parseFloat(value);
return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}
値がintまたはfloatかどうかを確認する必要がある場合:
function isFloatOrInt(n) {
return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}
まっすぐ進む:
if (parseFloat(value).toString() === value.toString()) {
...
}
この関数は、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>
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
_を浮動小数点値としてキャプチャする方法はありません。 numberが浮動小数点値であることをテストする場合は、次を使用します。
以下は、1.0、1.00などでは機能しません。
_if ( value >>> 0 !== x ) { // value is a floating point
}
_
注:!isNaN(value)
も確認する必要があります(変更点に焦点を当てるために省略しました)。