2061

JavaScriptで文字列を整数に変換するにはどうすればよいですか?

4

31 に答える 31

2519

最も簡単な方法は、ネイティブNumber関数を使用することです。

var x = Number("1000")

それがうまくいかない場合は、parseInt単項プラスfloorを使用したparseFloat、およびMath.roundメソッドがあります。

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

文字列がすでに整数の形式である場合は、単項プラス:

var x = +"1000";

文字列がfloatであるか、floatである可能性があり、整数が必要な場合:

var x = Math.floor("1000.01"); //floor automatically converts string to number

または、Math.floorを数回使用する場合:

var floor = Math.floor;
var x = floor("1000.01");

parseIntを呼び出すときに基数を入れるのを忘れるタイプの場合は、parseFloatを使用して、好きなように丸めることができます。ここでは床を使用します。

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

興味深いことに、Math.round(Math.floorのような)は文字列から数値への変換を行うので、数値を丸めたい場合(または文字列に整数がある場合)、これは素晴らしい方法であり、おそらく私のお気に入りです:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)
于 2009-07-15T20:28:48.790 に答える
262

parseInt関数を試してください:

var number = parseInt("10");

しかし問題がある。parseInt関数を使用して「010」を変換しようとすると、8進数として検出され、8を返します。したがって、基数(2から36)を指定する必要があります。この場合、10進数です。

parseInt(string, radix)

例:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

parseInt有効なものを解析した後、不良データを無視することに注意してください。
このGUIDは51として解析されます。

var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true
于 2009-07-15T20:23:49.237 に答える
137

javascriptで文字列を数値に変換する主な方法は2つあります。1つの方法はそれを解析することであり、もう1つの方法はその型を数値に変更することです。他の回答(単項プラスなど)のすべてのトリックには、文字列の型を数値に強制的に強制することが含まれます。Number関数を使用して同じことを明示的に行うこともできます。

構文解析

var parsed = parseInt("97", 10);

parseIntとparseFloatは、文字列を数値に解析するために使用される2つの関数です。認識できない文字にヒットすると、解析はサイレントに停止します。これは、「92px」などの文字列の解析に役立ちますが、入力が正しくない場合にエラーが発生しないため、多少危険です。文字列が数字で始まらない限り、NaNを返します。文字列の先頭の空白は無視されます。これは、あなたが望むものとは異なる何かをし、何かがうまくいかなかったことを示さない例です:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

常に基数を2番目の引数として指定することをお勧めします。古いブラウザでは、文字列が0で始まっている場合、基数が指定されていないと8進数として解釈されるため、多くの人が驚きました。16進数の動作は、基数が指定されていない場合に文字列を0xで開始することによってトリガーされます0xff。標準は実際にはecmascript5で変更されたため、基数が指定されていない場合、先行ゼロがある場合に最近のブラウザーは8進数をトリガーしなくなりました。parseIntは、基数36までの基数を理解します。この場合、大文字と小文字の両方が同等として扱われます。

文字列のタイプを数値に変更する

parseIntを使用しない上記の他のすべてのトリックは、文字列を数値に暗黙的に強制することを含みます。私はこれを明示的に行うことを好みます、

var cast = Number("97");

これは、解析メソッドとは異なる動作をします(ただし、空白は無視されます)。より厳密です。文字列全体を返すよりも理解できない場合は、。NaNのような文字列には使用できません97px。Numberラッパーオブジェクトではなくプリミティブ番号が必要なためnew、Number関数の前に置かないように注意してください。

明らかに、数値に変換すると、整数ではなく浮動小数点数になる可能性のある値が得られるため、整数が必要な場合は、それを変更する必要があります。これを行うにはいくつかの方法があります。

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

任意のビット演算子(ここではビット単位またはを実行しましたが、前の回答またはビットシフトのように二重否定を実行することもできます)は値を32ビット整数に変換し、それらのほとんどは符号付き整数に変換します。これは、大きな整数には必要ないことに注意してください。整数を32ビットで表現できない場合は、折り返します。

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

大きな数値で正しく機能するには、丸め方法を使用する必要があります

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

coeercionは指数表記とInfinityを理解するため、NaN2e2では200なく理解しますが、解析メソッドは理解しないことに注意してください。

カスタム

これらの方法のいずれかがあなたが望むことを正確に行うことはありそうにありません。たとえば、通常、解析が失敗した場合にエラーをスローする必要があり、Infinity、指数、または先頭の空白のサポートは必要ありません。ユースケースによっては、カスタム変換関数を作成することが理にかなっている場合があります。

Numberの出力または解析メソッドの1つが、期待する種類の数値であることを常に確認してください。ほぼ確実にisNaN、数値がNaNでないことを確認するために使用する必要があります(通常、解析が失敗したことを確認する唯一の方法です)。

于 2013-12-11T07:47:48.867 に答える
55

ParseInt()と+は異なります

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456
于 2012-03-14T09:54:21.633 に答える
49

最速

var x = "1000"*1;

テスト

これが速度の比較です(Mac OSのみ)... :)

chromeの「plus」と「mul」が最も速く(> 700,000,00 op / sec)、「Math.floor」が最も遅くなります。Firefoxの場合、「plus」が最も遅くなります(!)「mul」が最も速くなります(> 900,000,000 op / sec)。Safariでは、「parseInt」は高速で、「数値」は最も低速です(ただし、結果は非常に似ており、> 13,000,000 <31,000,000です)。したがって、文字列をintにキャストするSafariは、他のブラウザよりも10倍以上低速です。したがって、勝者は' mul 'です:)

このリンクhttps://jsperf.com/js-cast-str-to-number/1を使用して、ブラウザで実行できます 。

ここに画像の説明を入力してください

アップデート

私もテストvar x = ~~"1000";します-ChromeとSafariでは(<1%)よりも少し遅く、var x = "1000"*1Firefoxでは(<1%)少し速くなります。上の写真を更新してテストします

于 2017-03-27T21:42:08.473 に答える
37

古い質問ですが、おそらくこれは誰かに役立つ可能性があります。

文字列を整数に変換するこの方法を使用します

var str = "25";       // string
var number = str*1;   // number

したがって、1を掛けても値は変わりませんが、jsは自動的に数値を返します。

ただし、以下に示すように、これはstr、が数値である(または数値として表すことができる)ことが確実な場合に使用する必要があります。そうでない場合は、数値ではなくNaNが返されます。

使用する簡単な関数を作成できます。

function toNumber(str) {
   return str*1;
}

ここに画像の説明を入力してください

于 2014-03-16T18:24:53.117 に答える
36

parseIntを試してください。

var number = parseInt("10", 10); //number will have value of 10.
于 2009-07-15T20:23:24.887 に答える
29

ここに間違った答えを投稿しました、ごめんなさい。修繕。

これは古い質問ですが、私はこのトリックが大好きです:

~~"2.123"; //2
~~"5"; //5

ダブルビット単位の負の値は、小数点以降はすべてドロップされ、数値形式に変換されます。関数などを呼び出すよりも少し速いと言われていますが、完全には確信していません。

編集:私がここで見た別の方法(javascript >>>演算子に関する質問、これはゼロフィルの右シフトです)は、この演算子で数値を0だけシフトすると、数値がuint32に変換されることを示しています。また、署名されていないことを望みます。繰り返しますが、これは符号なし整数に変換され、符号付き数値を使用すると奇妙な動作を引き起こす可能性があります。

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5
于 2013-01-16T09:51:40.890 に答える
18

parseIntを使用して浮動小数点を科学的記数法に変換する場合は注意してください。例えば:

parseInt("5.6e-14") 

結果として

5 

それ以外の

0
于 2010-07-01T06:48:46.993 に答える
14

文字列を整数に変換するには、parseIntではなくparseFloatを使用することをお勧めします。理由は次のとおりです。

parseFloatの使用:

parseFloat('2.34cms')  //Output: 2.34
parseFloat('12.5')     //Output: 12.5
parseFloat('012.3')    //Output: 12.3

parseIntの使用:

parseInt('2.34cms')  //Output: 2
parseInt('12.5')     //Output: 12
parseInt('012.3')    //Output: 12

したがって、parseIntは小数点以下の値を破棄することに気付いた場合、parseFloatを使用すると浮動小数点数を処理できるため、小数点以下の値を保持する場合に適しています。整数値が必要であることが確実な場合にのみ、parseIntを使用してください。

于 2015-06-13T05:36:35.840 に答える
14

以下の例をご覧ください。疑問を解消するのに役立ちます

Example                  Result

parseInt("4")            4
parseInt("5aaa")         5
parseInt("4.33333")      4
parseInt("aaa");         NaN (means "Not a Number")

parseint関数を使用することにより、整数のopのみが提供され、文字列は提供されません

于 2015-11-27T12:43:44.870 に答える
13

また、補足として:Mootoolsには、任意のネイティブ文字列(またはfloat(または整数))で使用される関数toInt()があります。

"2".toInt()   // 2
"2px".toInt() // 2
2.toInt()     // 2
于 2009-07-16T20:05:02.647 に答える
13

+(stringOfNumber)使用する代わりに使用できますparseInt(stringOfNumber)

例:+("21")のように21のintを返しますparseInt("21")

この単項「+」演算子を使用して、floatを解析することもできます。

于 2015-07-07T12:51:16.547 に答える
13

Javascriptでは、次のことができます。-

ParseInt

parseInt("10.5") //returns 10

1を掛ける

var s = "10";
s = s*1;  //returns 10

単項演算子の使用(+)

var s = "10";
s = +s;  //returns 10

ビット演算子の使用

(注:それは後に壊れ始めます2140000000。例:-)~~"2150000000" = -2144967296

var s= "10.5";
s = ~~s; //returns 10

Math.floor()またはMath.ceil()の使用

var s = "10";
s = Math.floor(s) || Math.ceil(s); //returns 10
于 2021-03-25T11:02:45.283 に答える
11

JavaScriptには、文字列を数値に変換する方法がたくさんあります...すべてシンプルで便利です。適切な方法を選択してください。

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

また、数学演算はそれらを数値に変換します。たとえば...

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

私の好みの方法は+、JavaScriptで文字列を数値に変換するエレガントな方法であるsignを使用することです。

于 2017-05-30T12:43:19.177 に答える
10

str - 0に変換stringしてみてくださいnumber

> str = '0'
> str - 0
  0
> str = '123'
> str - 0
  123
> str = '-12'
> str - 0
  -12
> str = 'asdf'
> str - 0
  NaN
> str = '12.34'
> str - 0
  12.34

文字列をintに変換するいくつかの方法のパフォーマンスを比較するための2つのリンクを次に示します。

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html

于 2015-10-30T02:21:37.057 に答える
10

これが最も簡単な解決策です

let myNumber = "123" | 0;

より簡単な解決策

let myNumber = +"123";
于 2019-06-06T13:22:46.090 に答える
9

私の意見では、フロートを解析するとエラーが発生するため、すべてのエッジケースをカバーする答えはありません。

function parseInteger(value) {
    if(value === '') return NaN;
    const number = Number(value);
    return Number.isInteger(number) ? number : NaN;
}
parseInteger("4")            // 4
parseInteger("5aaa")         // NaN
parseInteger("4.33333")      // NaN
parseInteger("aaa");         // NaN
于 2017-03-27T15:12:00.500 に答える
7

その結果、グーグルは私にこの答えをくれたので...

CとJavaScriptをバインドするために、実際には文字列を整数として「保存」する必要があったので、文字列を整数値に変換します。

/*
    Examples:
        int2str( str2int("test") ) == "test" // true
        int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
    Limitations:
        max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
    var ret = 0;
    var len = the_str.length;
    if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) <<  0;
    if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) <<  8;
    if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
    if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
    return ret;
}
function int2str(the_int) {
    var tmp = [
        (the_int & 0x000000ff) >>  0,
        (the_int & 0x0000ff00) >>  8,
        (the_int & 0x00ff0000) >> 16,
        (the_int & 0xff000000) >> 24
    ];
    var ret = "";
    for (var i=0; i<4; i++) {
        if (tmp[i] == 0)
            break;
        ret += String.fromCharCode(tmp[i]);
    }
    return ret;
}
于 2016-11-07T16:05:25.677 に答える
7

最も簡単な方法は+、このように使用することです

const strTen = "10"
const numTen = +strTen      // string to number conversion
console.log(typeof strTen)  // string
console.log(typeof numTen)  // number
于 2021-08-18T21:40:24.377 に答える
3
function parseIntSmarter(str) {
    // ParseInt is bad because it returns 22 for "22thisendsintext"
    // Number() is returns NaN if it ends in non-numbers, but it returns 0 for empty or whitespace strings.
    return isNaN(Number(str)) ? NaN : parseInt(str, 10);
}
于 2019-07-30T15:04:58.407 に答える
3

プラスを使用できます。例えば:

var personAge = '24';
var personAge1 = (+personAge)

typeof personAge1次に、 ;で新しい変数の型を確認できます。これはnumberです。

于 2019-11-09T06:56:55.167 に答える
2

別のオプションは、値をそれ自体と2倍のXORすることです。

var i = 12.34;
console.log('i = ' + i);
console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i));

これは出力します:

i = 12.34
i ⊕ i ⊕ i = 12
于 2018-01-17T22:16:07.770 に答える
2

文字列の前にプラス(+)を1つだけ追加しましたが、それが解決策でした。

+"052254" //52254

それが役に立てば幸い ;)

于 2019-03-10T20:55:58.550 に答える
2

数字の乗算をそれぞれの10の累乗で合計します。

つまり、123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 *(10 ^ 2)+ 2 *(10 ^ 1)+ 3 *(10 ^ 0)

function atoi(array) {

// use exp as (length - i), other option would be to reverse the array.
// multiply a[i] * 10^(exp) and sum

let sum = 0;

for (let i = 0; i < array.length; i++) {
    let exp = array.length-(i+1);
    let value = array[i] * Math.pow(10,exp);
    sum+=value;
}

return sum;

}

于 2019-05-16T18:59:27.983 に答える
2

有効な整数を確実に取得するための最も安全な方法:

let integer = (parseInt(value, 10) || 0);

例:

// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
// Example 2 - Valid value:
let value = "1230.42";
let integer = (parseInt(value, 10) || 0);
// => integer = 1230
// Example 3 - Invalid value:
let value = () => { return 412 };
let integer = (parseInt(value, 10) || 0);
// => integer = 0
于 2019-07-01T08:48:47.690 に答える
1

上記のすべてが正しいです。「typeotx==='number'」を実行して、これが文字列内の数値であることを確認してください。そうでない場合は、NaNが返されます。

 var num = "fsdfsdf242342";
 typeof num => 'string';

 var num1 = "12423";
 typeof num1 => 'number';
 +num1 = > 12423`
于 2017-03-30T07:04:17.897 に答える
1

function doSth(){
  var a = document.getElementById('input').value;
  document.getElementById('number').innerHTML = toNumber(a) + 1;
}
function toNumber(str){
  return +str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>

于 2017-04-04T17:03:12.463 に答える
1

私はこれを使います

String.prototype.toInt = function (returnval) { 
    var i = parseInt(this);
    return isNaN(i) ? returnval !== undefined ? returnval : - 1  :      i; 
}

このようにして、私は常にintを取り戻します。

于 2018-08-17T16:53:33.383 に答える
0

これは(おそらく)整数を解析するための最良の解決策ではありませんが、整数を「抽出」する必要がある場合は、たとえば次のようになります。

"1a2b3c" === 123
"198some text2hello world!30" === 198230
// ...

これは機能します(整数の場合のみ):

var str = '3a9b0c3d2e9f8g'

function extractInteger(str) {
  var result = 0;
  var factor = 1

  for (var i = str.length; i > 0; i--) {
    if (!isNaN(str[i - 1])) {
      result += parseInt(str[i - 1]) * factor
      factor *= 10
    }
  }

  return result
}

console.log(extractInteger(str))

もちろん、これは整数の解析にも機能しますが、他の方法よりも遅くなります。

このメソッドを使用して整数を解析し、文字列が数値でない場合に返すこともできますが、これは内部に依存しており、おそらく高速であるNaNため、なぜ必要なのかわかりません。parseIntparseInt

var str = '3a9b0c3d2e9f8g'

function extractInteger(str) {
  var result = 0;
  var factor = 1

  for (var i = str.length; i > 0; i--) {
    if (isNaN(str[i - 1])) return NaN
    result += parseInt(str[i - 1]) * factor
    factor *= 10
  }

  return result
}

console.log(extractInteger(str))

于 2020-12-09T00:03:18.957 に答える
0

それを試してみてください

console.log(Number('90'));
console.log(+'90');
于 2022-03-02T07:32:36.097 に答える