web-dev-qa-db-ja.com

文字列がフロートかどうかを確認するにはどうすればよいですか?

Valueというパラメーターを渡します。値がfloatかどうかを知りたい。これまでのところ、私は以下を持っています:

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

さらに一歩進んで、文字列を浮動小数点数に評価できるものに変換するにはどうすればよいですか?

36
Nate Pet

このような:

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

ParseFloat関数を使用できます。

渡された値がfloatの場合、関数は値を返します。それ以外の場合、NaNを返します。

何かのようなもの:

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

次の関数もフォーマットをチェックします。例えば。 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"));
7
Yasas Rangika
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ではすべての数値がフロートですです。


6
Powerslave

これを使って:

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

私の場合、非常に単純な正規表現がトリックを行いました。

入力が有効な金額かどうかをユーザーの入力を検証する必要がありました。私は単純に

/^[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
2
maksbd19

文字列がフロートかどうかを確認するには(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
2
rodrigomelo
function checkFloat(value) {
    let parsed = Number.parseFloat(value);
    return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}
2
prmph

値がintまたはfloatかどうかを確認する必要がある場合:

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

まっすぐ進む:

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

この関数は、intまたはfloatに関係なく、文字列の数値を返します

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

この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>
0
reza akhlaghi

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)も確認する必要があります(変更点に焦点を当てるために省略しました)。

0
0x499602D2