1. 数値は長いです。C# で有効な長整数は実際には...JavaScript では...
次の単純なコード行を見てください:
alert(parseInt(b));// 10 が入力されていないからですか? 16 進数の理由はすでにご存知かもしれません。 parseInt(b) は 1 を返します!次に、a と b を文字列に置き換えてテストします。
var a = "0.000001";
var b = "0.0000001";
alert(parseInt(b));
今回は、a と b の両方が 0 を返します。これは私たちが望んでいる予想される結果です。そこでLou Zhu氏は大胆な推測をしました。JavaScriptが0から始まる数値を処理する場合、8進数として扱われることがあるとのことです。この考え、kaoは理にかなっています。しかし、ここでテストした 2 つの浮動小数点数 a と b はどちらも 0 から始まります。まあ、Lou Zhu は他に理由が思いつかなかったので、テストするために、奇妙な結果を生成した数値 b を parseInt(b, 10) に変更する必要がありました。それはまだ 1 でした。次に、Louzhu は Number と parseFloat をテストしました:
var a = 0.000001;
var b = 0.0000001;
alert(Number(a));//1e-7
alert(parseFloat(a)) ;
alert(parseFloat(b)); //1e-7
はは、今度はルー・ジュウが真実を発見することに近づいているようです。 bNumber と parseFloat の後に、科学表記法である 1e-7 が表示されます。どうやら実際には8進数の問題のようです。その後、nclouzhu は、まず parseInt にする数値を String または String に変換することで問題を解決できると当然のことと考えました。
var b = 0.0000001
alert(parseInt(b.toString(), 10)); 10));
くそー、なぜ今回はまだ 1 なのですか?これを次のように変更しても同じです:
var b = String (0.0000001);
alert(parseInt(b));
では、この 8 進数の parseInt が科学表記法で数値を返すには、どうすればよいでしょうか。丸めて?開発ニーズに応じて、関数を簡単に実装できる Math 関数があります。
var b = 0.0000001;
alert(Math.floor(b));
よく使われるfloorメソッドとceilメソッドの違いについてJavaScript の数学関数については、関連ドキュメントを参照してください。ここでは説明しません。最後に、貴重なご意見やご提案をお待ちしております。