46

valueというパラメータを渡しています。値がフロートかどうか知りたいのですが。これまでのところ、私は次のものを持っています:

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

さらに一歩進んで、文字列をフロートと評価できるものに変換するにはどうすればよいですか?

4

16 に答える 16

46

このような:

if (!isNaN(value) && value.toString().indexOf('.') != -1)
{
    alert('this is a numeric value and I\'m sure it is a float.');
}​
于 2012-09-17T22:00:16.960 に答える
37

この機能を使用できますparseFloat

渡された値がfloatのように見えるもので始まる場合、関数はfloatに変換された値を返します。そうでない場合、NaNを返します。

何かのようなもの:

function beginsWithFloat(val) {
  val = parseFloat(val);
  return ! isNaN(val);
}
console.log(beginsWithFloat("blabla")); // shows false
console.log(beginsWithFloat("123blabla")); // shows true

于 2012-09-17T21:49:37.410 に答える
16

以下の関数もフォーマットをチェックします。たとえば、JavaScriptのネイティブ関数parseIntparseFloat関数は、数字以外の文字を含む文字列も解析します。上記の関数は、この結果をもたらします。

// 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);
}
于 2014-02-09T20:29:00.793 に答える
10

文字列が整数か浮動小数点数かを確認するには

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

//alert(isFloat("3.444"));
于 2013-07-03T05:02:16.433 に答える
5
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では実際にはfloatとは見なされません。つまり、JSではすべての数値がfloatです。


編集:組み込み型のプロトタイプを拡張することは(正当な理由で)悪い方法と見なされ、本番環境での使用は推奨されないことを忘れてしまいました。このチェックをプレーン関数として実装することもできます

于 2013-08-08T12:56:41.840 に答える
5

私の場合、非常に単純な正規表現でうまくいきました。

ユーザーの入力が有効な金銭的価値であるかどうかを検証する必要がありました。私は単に使用しました-

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

その間のすべて//が正規表現です。

/^一致が単語の先頭から始まり、一致が単語$/で終わることを意味します。単語が文字で始まらないと思うなら0、表現は次のようになります[1-9][0-9]*

[0-9]+単語は少なくとも1つの数字で始まる必要があることを意味します。

注:*0以上を+意味し、1つ以上を?意味し、1つまたはまったくないことを意味します。

ここまでの式は/^[1-9][0-9]*$/であり、これは整数のみを検証します。

式で使用する必要のある数値のピリオド(。)をテストするには\..すべてに一致する特殊文字であり\.、ピリオドのみに一致します。

最後に、別の文字クラス[0-9]*が0桁以上の数字と一致します。

テストケース

/^[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
于 2016-08-07T11:06:08.483 に答える
4

これを使って:

var isNumber = /^\d+\.\d+$/.test(value);
于 2017-07-24T10:09:55.167 に答える
3
function checkFloat(value) {
    let parsed = Number.parseFloat(value);
    return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}
于 2017-05-29T00:02:01.007 に答える
2

文字列がfloatであるかどうかを確認するには(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
于 2014-02-18T04:41:11.583 に答える
1

文字列として渡された場合にのみ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)(変更に焦点を合わせるために省略しました)。

于 2012-09-17T22:26:57.430 に答える
1

値がintかfloatかを確認する必要がある場合:

function isFloatOrInt(n) {
    return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}
于 2015-03-31T09:36:35.913 に答える
1

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

function getNumericVal(str) {
    if(isNaN(str)) return;
    try {return parseFloat(str);} 
    catch(e) {return parseInt(str);}
}
于 2017-02-28T11:15:59.623 に答える
0

簡単:

if (parseFloat(value).toString() === value.toString()) {
    ...
}
于 2015-11-12T13:45:08.610 に答える
0

この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>
于 2018-01-02T14:43:43.567 に答える
0
function isFloat(inputString) {
    const parsed = parseFloat(inputString);

    return !isNaN(parsed) && parsed.toString() === inputString;
}

isFloat('.4') // false
isFloat('1.4') // true
isFloat('1.') // false
isFloat('1') // true
isFloat('asd') // false
isFloat('123asd') // false
于 2021-01-11T23:36:32.427 に答える
-3
if (!isNaN(value) && String(value).includes('.')) {
    alert("it's a float");
    let newFloatValue = parseFloat(value)
}
于 2021-06-05T18:24:19.653 に答える