web-dev-qa-db-ja.com

Javascript文字列からintへの変換

次のJSがページに埋め込まれています。

_var round = Math.round;
var id = $(this).attr("id");

var len = id.length;
var indexPos = len -1; // index of the number so that we can split this up and used it as a title

var pasType = id.substring(0, indexPos); // adult, child or infant
var ind = round(id.substring(indexPos)); // converts the string index to an integer
var number = (id.substring(indexPos) + 1); // creates the number that will go in the title
window.alert(number);
_

idはadult0のようなものになります。この文字列を取得して、アダルトと0に分割する必要があります-この部分は正常に機能します。

0をインクリメントしようとすると問題が発生します。ご覧のとおり、Math.roundを使用して整数に変換し、1を追加します。この後0が1になると予想しています。ただし、_01_ではなく_1_を取得するため、整数に変換しているようには見えません。 adult1でこれをテストすると、私が受け取るアラートは_11_です。

参照用に this の質問を使用しており、JS(_unexpected identifier '+='_)を壊すvar number += id.substring(indexPos);も試しました。

誰かが私が間違っていることを知っていますか?これを行うより良い方法はありますか?

24
Skytiger

parseInt()関数はstringを解析し、integer、10を返します。基数または基数 [DOC]

var number = parseInt(id.substring(indexPos) , 10 ) + 1;
35
Charaf JRA

これは、JavaScriptの+ in演算子と関係があります-数値と文字列が「加算」されると、数値は文字列に変換されます。

0 + 1; //1
'0' + 1; // '01'

これを解決するには、+単項演算子を使用するか、parseInt()を使用します。

+'0' + 1; // 1
parseInt('0', 10) + 1; // 1

単項+演算子はそれを数値に変換します(ただし、小数点である場合は小数点以下を保持します)。parseInt()は自明です(数値に変換し、小数点以下は無視します)。

parseInt()が先行する0が配置されたときに正しいベースを使用するには、2番目の引数が必要です。

parseInt('010'); // 8 in older browsers, 10 in newer browsers
parseInt('010', 10); // always 10 no matter what

文字列の小数を数値に変換する必要がある場合はparseFloat()もあります。+もそれを実行できますが、動作が少し異なります。

8
Qantas 94 Heavy

JSは、0が実際には文字列であると考え、intに変換するには、次のようにparseInt()関数を使用します。

var numberAsInt = parseInt(number, 10);  
// Second arg is radix, 10 is decimal.

数値をintに変換できない場合、NaNが返されますので、実稼働で使用されるコードでも、少なくとも入力が100%確実でない場合はNaNを確認することをお勧めします。

4
Jite

parseIntがこれを行う公式関数ですが、このコードで同じことを実現できます。

number*1

利点は、いくつかの文字を保存することです。これにより、コードで多くの会話が必要になる場合に帯域幅を節約できます。

3
Alexander Jank

Number Classで変換:_

例えば:

var n = Number("103");
console.log(n+1)

出力: 104

注:-Numberはクラスです。文字列を渡すと、Number classのコンストラクタが文字列を変換します。

3
Arshid KV

ParseInt()を使用します。

var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
2
juju

If.substring(indexof)が数値であることが確実な場合、次のようにできます。

var number = Number(id.substring(indexPos)) + 1;

それ以外の場合、Number関数が正しく評価されるかどうかを確認することをお勧めします。

2
user1203684