Mam wyniki podziału i chcę odrzucić dziesiętną część wynikowej liczby.
W jaki sposób mogę to zrobić?
źródło
Mam wyniki podziału i chcę odrzucić dziesiętną część wynikowej liczby.
W jaki sposób mogę to zrobić?
Możesz użyć ...
Math.trunc()
(obcięcie części ułamkowej, patrz również poniżej)Math.floor()
(zaokrąglić w dół)Math.ceil()
(podsumowanie) Math.round()
(zaokrąglić do najbliższej liczby całkowitej)... w zależności od tego, jak chciałeś usunąć przecinek dziesiętny.
Math.trunc()
nie jest jeszcze obsługiwany na wszystkich platformach (tj. IE), ale w międzyczasie możesz z łatwością skorzystać z funkcji wypełniania .
Innym sposobem obcięcia części ułamkowej przy doskonałym wsparciu platformy jest użycie operatora bitowego (.eg |0
). Efektem ubocznym użycia operatora bitowego na liczbie jest to, że będzie traktował swój operand jako 32-bitową liczbę całkowitą ze znakiem, usuwając w ten sposób część ułamkową. Pamiętaj, że spowoduje to także zawieszenie liczb większych niż 32 bity.
Być może mówisz także o niedokładności zaokrąglania dziesiętnego za pomocą arytmetyki zmiennoprzecinkowej.
Wymagana lektura - co każdy informatyk powinien wiedzieć o arytmetyki zmiennoprzecinkowej .
Math.floor()
będzie zwiększyć wartość liczbową, gdy liczba jest ujemna . Tak więcMath.floor(-1.2) -> -2
podczasMath.floor(1.2) -> 1
.parseInt(-1.2) -> -1
( jak wspomniano w @FloydPink ) odrzuci część dziesiętną zgodnie z oczekiwaniami zarówno dla liczb dodatnich, jak i ujemnych .> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100
w javascript jest229.99999999999997
, więc wydaje się, że operator bitowy poprawnie wykonuje swoją pracę w twoim przykładzie.|0
które wykorzystuje 64-bitowe liczby całkowite?Możesz także użyć operatorów bitowych, aby obciąć przecinek dziesiętny.
na przykład
Operacje bitowe są znacznie wydajniejsze niż funkcje matematyczne. Podwójna operator nie bitowe wydaje się również nieznacznie przewyższają
x | 0
ix << 0
bitowe operacje przez znikomą ilość.Warto również zauważyć, że operator bitowy nie ma pierwszeństwa przed operacjami arytmetycznymi, więc może być konieczne otoczenie obliczeń nawiasami, aby uzyskać zamierzony wynik:
Więcej informacji na temat operatora Double Bitwise Not można znaleźć w Double Bitwise NOT (~~)
źródło
Ty też możesz to zrobić
źródło
parseInt
nie będzie działać niezawodnie dla dużych liczb, ponieważ działa najpierw poprzez konwersję argumentu na ciąg, a dla dużych liczb wynik użyje notacji wykładniczej. Na przykład:var n = 22222222222222222222222; parseInt(n);
zwróci2
, ponieważn.toString()
zwraca2.2222222222222223e+22
.parseInt()
ze względu na swój cel, którym jest pobranie liczby w ciągu i zwrócenie aNumber
.Możesz także wyświetlić określoną liczbę cyfr po przecinku (tutaj 2 cyfry), używając następującego kodu:
źródło
Użyj
Math.round()
funkcji.źródło
$.round = Math.round
;)Zastosowanie
Math.round()
.(Odpowiedź Alexa jest lepsza; założyłem :)
źródło
W ES2015 dostępna jest funkcja Math.trunc () .
Nie jest obsługiwany w IE11 lub niższej, ale działa w Edge i każdej innej nowoczesnej przeglądarce.
źródło
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)
to zadziała?value = 2.3
ix = 2
wróci2.29
. Nie mam lepszej sugestii.Jeśli nie zależy ci na roudingu, po prostu przekonwertuj liczbę na ciąg znaków, a następnie usuń wszystko po okresie, w tym po okresie. Działa to niezależnie od tego, czy występuje ułamek dziesiętny, czy nie.
źródło
toFixed zachowuje się jak okrągły.
Dla zachowania podobnego do podłogi użyj%:
źródło
Oto szczegółowe wyjaśnienie kompresji za pomocą powyższych postów:
1. Math.trunc (): Służy do usuwania cyfr, po których następuje kropka. Przekształca się niejawnie. Ale nie obsługiwane w IE.
Przykład:
Math.trunc (10.5) // 10
Math.trunc (-10.5) // -10
Inny alternatywny sposób: użycie operatora bitowego nie operatora:
Przykład:
x = 5,5
~~ x // 5
2. Math.floor (): Służy do podania możliwej minimalnej wartości całkowitej. Jest obsługiwany we wszystkich przeglądarkach.
Przykład:
Math.floor (10.5) // 10
Math.floor (-10.5) // -11
3. Math.ceil (): Służy do podania najwyższej możliwej wartości całkowitej. Jest obsługiwany we wszystkich przeglądarkach.
Przykład:
Math.ceil (10.5) // 11
Math.ceil (-10.5) // -10
4. Math.round (): Jest zaokrąglany do najbliższej liczby całkowitej. Jest obsługiwany we wszystkich przeglądarkach.
Przykład:
Math.round (10.5) // 11
Math.round (-10.5) // -10
Math.round (10.49) // 10
Math.round (-10.51) // -11
źródło
Na przykład:
lub
źródło
W przypadku implementacji ES6 użyj czegoś takiego:
źródło
To jest dla tych, którzy chcą uniemożliwić użytkownikom wprowadzanie liczb dziesiętnych
źródło
Możesz użyć .toFixed (0), aby usunąć pełną część dziesiętną lub podać liczbę w argumentach do, którą chcesz obciąć dziesiętnie.
Uwaga: toFixed przekonwertuje liczbę na ciąg znaków.
źródło