2009-08-24 13 views
25

Jak mogę przetestować zmienną, aby upewnić się, że zawiera ona liczbę i jest liczbą całkowitą?Jak wykryć, czy podana liczba jest liczbą całkowitą?

np.

if (1.589 == integer) // false 
if (2 == integer) // true 

Jakieś wskazówki?

+0

możliwe duplikat [Jak sprawdzić, czy zmienna jest liczbą całkowitą w JavaScript?] (Http://przepełnienie stosu.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript) –

Odpowiedz

50
num % 1 === 0 

ten przekształci num wpisać Number początku, więc wartość, która może być przekształcona do całkowitej przejdzie testu (np '42', true).

Jeśli chcesz wykluczyć te, dodatkowo sprawdzić

typeof num === 'number' 

Można również użyć parseInt() to zrobić, czyli

parseInt(num) == num 

dla pozbawionym typu Sprawdź i

parseInt(num) === num 

dla wpisanego czeku.

Należy zauważyć, że testy nie są równoważne: sprawdzenie za pomocą parseInt() zostanie najpierw przekonwertowane na String, więc np. true nie przejdzie testu.

Należy również pamiętać, że bez typu check poprzez parseInt() zajmie ciągów szesnastkowych poprawnie, ale nie powiedzie się na octals (tj ciągi liczbowe z zerem), ponieważ są one uznawane przez parseInt() ale nie przez Number(). Jeśli potrzebujesz obsługi łańcuchów dziesiętnych z zerami wiodącymi, musisz podać argument radix.

+0

Ten robi to, dziękuję. – jirkap

-1

Istnieje funkcja javascript o nazwie isNaN (val), która zwraca wartość true, jeśli val nie jest liczbą.

Jeśli chcesz użyć val postaci liczby, trzeba rzucić używając parseInt() lub parseFloat()

EDIT: oops. Poprawiono błąd, jak wspomniano w komentarzu

+1

Po prostu od nazwy funkcji, myślę, że "isNaN" zwróci true, jeśli val "jest * Nie * liczba", co jest co oznacza NaN. Typo? –

+1

isNaN (val) zwraca wartość true, jeśli val nie jest liczbą, ale zwraca również wartość false dla liczb niecałkowitych, więc nie rozwiąże problemu. – Amok

2

Jak o tym:

if((typeof(no)=='number') && (no.toString().indexOf('.')==-1)) 
+0

To nie zadziała, ponieważ 8.000 jest wciąż liczbą całkowitą. –

+1

To prawdopodobnie zależy od twojej definicji (i przypadku użycia) liczby całkowitej – bdukes

+0

Hmm. Prawdziwe. Z natury pytań matematycznych staram się myśleć o nich w kategoriach liczbowych, a nie liczbowych - stąd mój komentarz powyżej. –

0

można też skorzystać z możliwości lub Javas analizę składniową także wypróbować% operatora modulo ...

2

byłoby to nie działa:

if (parseInt(number, 10) == number) 
{ 
    alert(number + " is an integer."); 
} 
+1

Powinieneś zawsze uwzględnić parametr "podstawa": parseInt (number, 10) – Greg

+0

Ups, yes. Naprawione. – paracycle

+0

@Greg: niekoniecznie - można chcieć przekazać szesnastkowo; liczba ósemkowa się nie powiedzie, ponieważ są rozpoznawane przez 'parseInt()' ale nie przez 'Number()' – Christoph

6

Ktoś już ma done it for you.

+0

Jak @Greg mówi powyżej (http://stackoverflow.com/questions/1323314/detecting-if-a-given-number- is-an-integer # comment-1157013), powinno to zawierać parametr radix do parseInt. – bdukes

9

to działa:

if (Math.floor(x) == x) 
+0

Ma to tę zaletę, że działa, jeśli x to "fałsz"; –

4

Można użyć formalną definicję liczby całkowitej:

Math.floor(x) === x 
Powiązane problemy