<script type="text/javascript"> function test(){ alert(parseInt("01")-parseInt("03")); alert(parseInt("02")-parseInt("03")); alert(parseInt("03")-parseInt("03")); alert(parseInt("04")-parseInt("03")); alert(parseInt("05")-parseInt("03")); alert(parseInt("06")-parseInt("03")); alert(parseInt("07")-parseInt("03")); alert(parseInt("08")-parseInt("03"));//結果爲負 alert(parseInt("09")-parseInt("03"));//結果爲負 alert(parseInt("10")-parseInt("03")); alert(parseInt("11")-parseInt("03")); alert(parseInt("12")-parseInt("03")); } </script>
</head> <body> <a href="javascript:test()">點擊</a> </body> </html>
彈出結果依次爲:-2 -1 0 1 2 3 4 -3 -3 7 8 9
javascript
查找了JS的文檔後發現這個問題發生的緣由是前面的"0",parseInt方法有一個可選參數來表示數字的進制,以"0"做爲首字符的字符串會被JS識別爲八進制數並將沒有指定數字進制參數的參數值默認爲8,從而以八進制來解析字符串,而"08"和"09"都不是合法的八進制數,因此被解析爲0。</P> html
實際上,這是個不注意細節引發的問題,顯式設置進制參數的parseInt根本不會出現這個問題,parseInt("08",10)或parseInt("09",10)都能返回正確的數值。另外,parseFloat不會存在這個問題
java