1

重複の可能性:
先行ゼロの文字列をparseIntする方法

GoogleChromever。を使用しています。21.0.1180.89

私は実行します:

var a="07:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

出力は正しいです: "07-> 7" OK

私は実行します:

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2)));

出力は正しいです: "08->0"間違っています

なぜ?

4

5 に答える 5

2

文字列は、8進数として「0」で始まります。基数10を設定する必要がありますparseInt()

これを試して、

var a="08:30";
console.log(a.substring(0,2)+" --> "+parseInt(a.substring(0,2), 10));​
于 2012-09-14T09:57:20.887 に答える
0

基数(ベース)を追加します:parseInt(a.substring(0,2), 10)。何が起こっているのかというと、jsエンジンが文字列のベースを推測しようとしているのですが、推測が間違っているため、使用するベース(2進数、8進数、10進数、16進数など)をエンジンに指示する必要28あり10ます16

于 2012-09-14T09:56:20.160 に答える
0

parseInt(a.substring(0,2)、10);を使用する必要があります。

于 2012-09-14T09:59:56.477 に答える
0

parseIntstring解析するパラメータとオプションのパラメータの2つを取りますradix(ただし、JSHint / JSLintでは必須です)。{radix {パラメータparseIntを渡さない場合、渡した文字列に最適なものが「選択」されるため、文字列08の場合は、10進数(必要なもの)ではなく、8進数の基数が使用されます。

TL; DRを使用するときは、常に基数を設定してparseIntください。

ソース:MDN

于 2012-09-14T10:00:47.457 に答える
0

別のソリューションを提供するためだけに時間を扱っている場合は、次のようにしてみてください。

var clock = '07:30';
var time = {
  hours: +clock.split(':')[0],
  minutes: +clock.split(':')[1]
}
于 2012-09-14T10:04:13.630 に答える