Szukam łatwego sposobu w JavaScript, aby sprawdzić, czy liczba ma miejsce dziesiętne (w celu ustalenia, czy jest liczbą całkowitą). Na przykład,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Szukam łatwego sposobu w JavaScript, aby sprawdzić, czy liczba ma miejsce dziesiętne (w celu ustalenia, czy jest liczbą całkowitą). Na przykład,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Korzystanie z modułu będzie działać:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Pamiętaj, że jest to oparte na wartości liczbowej liczby, niezależnie od formatu. Traktuje ciągi liczbowe zawierające liczby całkowite ze stałym punktem dziesiętnym takim samym jak liczby całkowite:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
programowo, czy ma kropkę dziesiętną programowo, chyba że jest wyrażona jako ciąg znaków. Poza tym żadne z pozostałych rozwiązań nie uzyskało negatywnego wyniku za nie zajęcie się tym ;-)"10."
jest liczbą całkowitą, a wynik będzie dokładnie taki sam jak"10"
lub10
.Number.isInteger () jest częścią standardu ES6 i nie jest obsługiwany w IE11.
Zwraca false
NaN
,Infinity
a non-numeryczne argumenty natomiastx % 1 != 0
zwraca true.źródło
Number.isInteger(12.0)
zwracatrue
.Number.isInteger('1e3')
Jestfalse
, chociażNumber.isInteger(1e3)
jest prawdą. Zakładając, że celem pytania jest znalezienie wartości niecałkowitych (zamiast rzeczywistej obecności kropki dziesiętnej w reprezentacji), wówczas wartość ciągu „12 .0” powinna przejść, ponieważ reprezentuje liczbę całkowitą, ale znowuNumber.isInteger('12.0')
jestfalse
.number
jest całe, czy nie. Jeśli twoje dane wejściowe są ciągiem znaków, musisz je przekonwertować nanumber
pierwszy, np. PrzezparseFloat()
oczywiście.Możesz też użyć tego, aby dowiedzieć się, czy NIE jest to ułamek dziesiętny:
źródło
yournumber.toString.indexOf(".")
Najczęstszym rozwiązaniem jest usunięcie części liczby całkowitej z liczby i porównanie jej do zera w następujący sposób:
źródło
startVal != Math.floor(startVal)
?Math.Floor
Funkcja przyjmuje wartość dziesiętną i największa wartość dziesiętną jest dozwolony w JavaScript2^53 - 1
lub9007199254740991
. Ponieważ893144042145698745.3
jest większy niż to maksimum, funkcja zawiedzie.Proste ale efektywne!
źródło
Math.floor(3.0) == 3.0
jest prawdą,Math.floor(3.3) == 3.3
jest fałszem// Co powiesz na bajtowanie?
Zawsze źle się czuję dla operatorów bitów w javascript-
prawie nie ćwiczą.
źródło
>>
konwertuje wartość na 32-bitową liczbę całkowitą ze znakiem .Całkiem fajne i działa również na takie rzeczy jak XX.0! Działa, ponieważ Math.floor () odcina każdy ułamek dziesiętny, jeśli go ma, więc jeśli podłoga różni się od pierwotnej liczby, wiemy, że jest to ułamek dziesiętny! I brak konwersji ciągów :)
źródło
źródło
num= 999999999999999999999
.Number.isInteger()
jest prawdopodobnie najbardziej zwięzły. Zwraca true, jeśli jest liczbą całkowitą, a false, jeśli nie jest.źródło
źródło
gdy przekazany numer,
parseInt()
po prostu zwraca liczbę jako int:źródło
parseInt(3.0) === 3.0 // true
konwertuj ciąg liczbowy na tablicę, dzielony przez przecinek dziesiętny. Następnie, jeśli tablica ma tylko jedną wartość, oznacza to brak dziesiętnego ciągu.
W ten sposób możesz także wiedzieć, jaka jest liczba całkowita i dziesiętna. bardziej zaawansowanym przykładem byłby.
źródło
Oto fragment mojej biblioteki strażników (zainspirowanej przez Effective JavaScript Davida Hermana):
źródło
Możesz pomnożyć go przez 10, a następnie wykonać operację / podział „ modulo ” z 10 i sprawdzić, czy wynik tych dwóch operacji wynosi zero. Wynik tych dwóch operacji da ci pierwszą cyfrę po przecinku. Jeśli wynik jest równy zero, to liczba jest liczbą całkowitą.
źródło
źródło
Możesz użyć operacji bitowych, które nie zmieniają wartości (
^ 0
lub~~
), aby odrzucić część dziesiętną, której można użyć do zaokrąglenia. Po zaokrągleniu liczba jest porównywana z pierwotną wartością:źródło
źródło
Możesz użyć następującej funkcji, aby sprawdzić, czy liczba ma miejsca dziesiętne:
Najwyraźniej niektórzy użytkownicy chcą wyjaśnień. Rozbiorę to na kawałki: (num% 1)
Nawiasy oznaczają, że najpierw wykonaj te operacje. num - zmienna przekazana przez funkcję. % - symbol modułu, który próbuje podzielić lewą liczbę przez prawą. Jeśli jest reszta, zwraca ją jako liczbę dziesiętną. Jeśli dzieli się równomiernie, zwraca 0.
Podsumowując to, co do tej pory mamy., (Num% 1) zwróci:
0 równomiernie podzielone LUB #. ##### jeśli nie
0 == fałsz.
[ANY_NUMBER_NOT_ZERO] == prawda.
Przykłady: nowy Boolean (0) jest fałszem nowy Boolean (12312.1231) jest prawdziwy
Inne alternatywy: użytkownik mógł spróbować zwrócić wartość (num% 1)., Co w zasadzie pozwoliłoby osiągnąć to samo. Ponieważ return (0) jest false, a return (1.213113) jest true.
Ale chciałem zwrócić wartość logiczną. Więc jako skrót do wymuszenia wartości logicznej dodałem! symbol przed nim.
Tyle, ile może wiedzieć.,! oznacza NIE. Ale wymusza także wartość logiczną.
Od czasu! symobol wymusza wartość logiczną i odwraca jej wartość. Używam !! aby wymusić wartość na wartość logiczną i odwrócić jej wartość z powrotem do pierwotnej wartości logicznej.
źródło
Funkcja numeru kontrolnego to liczba dziesiętna lub całkowita
źródło
Może to ci odpowiada?
Używa wyrażenia regularnego, aby sprawdzić, czy w numerze jest przecinek, a jeśli go nie ma, doda przecinek i pasek.
źródło
Użyj następującego, jeśli wartość jest łańcuchem (np. Z
<input
):Dodam
.toString()
do podłogi, aby działała również w przypadkach, gdyvalue == "1."
(kończy się separatorem dziesiętnym lub innym ciągiem). RównieżMath.floor
zawsze zwraca pewną wartość, więc.toString()
nigdy nie zawodzi.źródło