2010-12-19 26 views
5

Mam kilka zer przed dodatnią liczbą całkowitą. Chcę usunąć zera, więc pozostaje tylko dodatnia liczba całkowita. Podobnie jak "001" będzie miało wartość "1". Sądziłem, że najłatwiej jest użyć parseInt ('001'). Ale odkryłem, że to nie działa dla liczb 8 i 9. Przykład parseInt ("008") spowoduje "0" zamiast "8".Funkcja JavaScript parseInt() nie analizuje liczb z prowadzącymi 0 poprawnie

Oto cały kod html:

<html> <body> 
<script> 
var integer = parseInt('002'); 
document.write(integer); 

</script> 
</body> </html> 

Ale mogę jakoś zgłosić ten problem? Czy ktoś wie inny łatwy sposób obejścia tego problemu?

+0

również, pozbawiając zer za pomocą 'parseInt ('008'). ToString()' jest bardzo niezdarny, należy rozważyć użycie 'docs RegExp' zamiast –

Odpowiedz

10

Jest to opisane zachowanie: http://www.w3schools.com/jsref/jsref_parseInt.asp

Struny o „0” są przetwarzane tak, jakby były ósemkowy.

+2

MDN są zwykle dużo wyższej jakości niż ich odpowiedniki W3Schools. [Here's] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt) odpowiednią stronę MDN. –

+1

Istotne: http://w3fools.com/ –

+0

[FireFox 21] (https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/21) z ciekawością zdecydował się [usunąć tę funkcję] (https://bugzilla.mozilla.org/show_bug.cgi?id=786135). Wygląda na to, że Chrome przez jakiś czas był taki: http://stackoverflow.com/questions/14542377 –

3

Numer przedrostka z zerem jest analizowany jako ósemkowy.

+2

To nie jest [cała historia] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Global_Objects/parseInt) - zależy od przeglądarki i wersji. –

15

Musisz podać podstawę numer (radix)

parseInt('01', 10); 
+5

Tak, a narzędzie do sprawdzania jakości JS, takie jak JSLint (http://www.jslint.com/) może Ci o tym powiedzieć :) –

1

Nie jest to rzeczywiście błąd. Ze względów starszych łańcuchy rozpoczynające się od 0 są interpretowane w postaci ósemkowej, a w ósemkowej nie ma cyfry 8. Aby obejść to, należy jawnie przekazać podstawę (tj. parseInt("008", 10)).