私はvalueというパラメータを渡しています。値が浮動小数点かどうかを知りたい はこれまでのところ、私は次のようしている:文字列が浮動小数点数であるかどうかを確認するにはどうすればよいですか?
if (!isNaN(value))
{
alert('this is a numeric value but not sure if it is a float.');
}
は、どのように私はさらに一歩進み、フロートに評価することができる何かに文字列を変換するのですか?
私はvalueというパラメータを渡しています。値が浮動小数点かどうかを知りたい はこれまでのところ、私は次のようしている:文字列が浮動小数点数であるかどうかを確認するにはどうすればよいですか?
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 numberic value and I\'m sure it is a float.');
}
parseFloat関数を使用できます。
渡された値がfloatの場合、関数は値を返し、そうでない場合はNaNを返します。
このようval = parseFloat(val);
if(isNaN(val))
alert("not a float!");
これは私にもっときれいで優雅な解決策に見えます –
これは実際の解決策ではありません。 floatに整数を解析しようとすると、実際には何も起こりません。 – Powerslave
@Powerslave実際にコードを試しましたか?それは動作します – Mangiucugna
value
を文字列として渡された場合のみ、我々は完全に決定することができます。 1.0
(数値として)はですが、"1.0"
(文字列として)の結果は"1.0"
と全く同じです。そしてそこから小数点が含まれているかどうかを調べることができます。.
したがって、引数value
を文字列として渡す必要があります。 value
が文字列の場合
は次の通りに動作します
if (value.indexOf('.') > -1) { // value is a floating point
}
value.toString()
1.0
"1.0"
(むしろ、それは単に1
にそれを回すでしょう)ので、文字列で渡すと、最善の選択肢があるためであるには変わりません。すべての文字を維持します。
文字列を使用しない場合は、1.0
を浮動小数点値として取り込む方法がありません。あなたは数のテストをしたい場合は、以下を使用して、浮動小数点値である:
以下は
if (value >>> 0 !== x) { // value is a floating point
}
など、1.0、1.00のために動作しません。注:また、チェックする必要があります!isNaN(value)
(私は変更に焦点を当ててそれを残しました)。
文字列が整数または浮動小数点
function isFloat(n) {
return parseFloat(n.match(/^-?\d*(\.\d+)?$/))>0;
}
//alert(isFloat("3.444"));
Number.prototype.isFloat = function() {
return (this % 1 != 0);
}
次にあなたが2.00
のような
var floatValue = parseFloat("2.13");
var nonFloatValue = parseFloat("11");
console.log(floatValue.isFloat()); // will output true
console.log(nonFloatValue.isFloat()); // will output false
値が本当にJSのfloatと考えることができないことができ、あるいは、むしろすべてのであるかどうかを確認するにはnumberはJSのfloatです。
これは大きな浮動小数点では機能しません。 (Number.MAX_VALUE * Math.random())%1!= 0 // falseを返します。これは、モジュールが大きな浮動小数点で0を返すためです。 –
@ Mient-janStellingそれは浮きの技術的な制限です。彼らは精密な問題を抱えていて、おおまかに言えば、技術的には特定のしきい値を上回る数値はありません。 POC: 'Math.round(Number.MAX_VALUE - 0.001)=== Number.MAX_VALUE - 0.001'(実際には、上記の丸め方の方程式を上記の丸め方の方程式で置き換えることができます) – Powerslave
以下の関数もフォーマットをチェックします。例えば。 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);
}
Nikolaは"、 "有効ですフロートセパレータ?私はドットがあると思う。 –
@DragomirIvanov、私たちはユーザーの入力を議論しています。数値形式はユーザーのロケールによって異なります。例えば。ドイツでは小数点の区切り記号としてコンマを使用し、千単位の区切り記号としてピリオドを使用します。あなたは言語の構文については正しいです。プログラミング言語は主に小数点の区切り文字にピリオドを使用しますが、これは当初の問題ではありませんでした。これは、ロケールの厳密な実装がないため、1つの場所で両方の形式をサポートするため、上記の正規表現の問題です。私はこれが記事全体を必要とするので、これがこの問題の範囲を超えていると思う。 –
この 'floatRegex'は' 1231.'または '87.'に対して真を返します。私は次の方が良いと思います: '/^- ?\ d +([。、]?\ d +)?$ /'。これは、整数もBTWにも真を返します。 – haffla
文字列がfloatである場合は、値がintや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
を確認するには:
function isFloatOrInt(n) {
return !isNaN(n) && n.toString().match(/^-?\d*(\.\d+)?$/);
}
私はその機能を書きました文字列、整数、浮動小数点を受け取る
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
}
例ouptuts:まっすぐ進む
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
:私の場合は
if (parseFloat(value).toString() === value.toString()) {
...
}
が巧妙であるが、同じ番号の複数の有効な表現が存在する場合には失敗する。 'parseFloat( '0.0000000000000001')。toString()' 1e-16'を返します。 – Michael
あなたは毎日何か新しいことを学びます:) ...素敵なコーナーケース... – user2846569
また、parseFloat( '1234567.890')。toString()== 1234567.89 – igo
非常に単純な正規表現は、トリックを行いました。
入力が有効な金額であるかどうかを検証する必要がありました。私は単純に使用しました -
/^[0-9]+(\.)?[0-9]*$/.test(number)
//
のすべてが正規表現です。
/^
は、単語の先頭から一致が始まることを意味し、$/
は一致が単語で終わることを意味します。単語が文字0
で始まるとは思わない場合、式は[1-9][0-9]*
[0-9]+
のようになります。単語は少なくとも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
科学記法はどうですか? 2e3は2000です。負の数値はどうですか? – doug65536
intまたはが
function getNumericVal(str) {
if(isNaN(str)) return;
try {return parseFloat(str);}
catch(e) {return parseInt(str);}
}
function checkFloat(value) {
let parsed = Number.parseFloat(value);
return (!Number.isNaN(parsed)) && (!Number.isInteger(parsed))
}
使用この浮いた場合、この関数は関係なく、文字列の数値を返します。
var isNumber = /^\d+\.\d+$/.test(value);
Uをこの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>
'parseFloat'を使ってみてください。 –
'value'はどのように渡されますか?フォームや何かを通して? – 0x499602D2
http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer –