Jestem nowy w JavaScript i właśnie odkryłem toFixed()
i toPrecision()
zaokrąglałem liczby. Jednak nie mogę dowiedzieć się, jaka jest różnica między nimi.
Jaka jest różnica między number.toFixed()
i number.toPrecision()
?
źródło
Jestem nowy w JavaScript i właśnie odkryłem toFixed()
i toPrecision()
zaokrąglałem liczby. Jednak nie mogę dowiedzieć się, jaka jest różnica między nimi.
Jaka jest różnica między number.toFixed()
i number.toPrecision()
?
toFixed(n)
podaje n
długość po przecinku; toPrecision(x)
zapewnia x
całkowitą długość.
Referencje w w3schools: toFixed i toPrecision
EDYCJA :
Dowiedziałem się jakiś czas temu, że w3schools nie jest najlepszym źródłem, ale zapomniałem o tej odpowiedzi, dopóki nie zobaczyłem „entuzjastycznego” komentarza kzh. Oto dodatkowe referencje z Mozilla Doc Center dlatoFixed()
i dlatoPrecision()
. Na szczęście dla nas wszystkich, MDC i w3schools zgadzają się ze sobą w tej sprawie.
Dla kompletności powinienem wspomnieć, że toFixed()
jest równoważny toFixed(0)
i toPrecision()
po prostu zwraca oryginalną liczbę bez formatowania.
toPrecision(x)
nie „podajex
całkowitej długości”, formatuje do liczby podanych cyfr znaczących. Na przykład0.0000022.toPrecision(1)
zwróci0.000002
.toPrecision(x)
podajex
całkowitą długość”. niekoniecznie ma. Przykład licznika:0.00001234.toPrecision(3)
Uważam, że pierwszy daje stałą liczbę miejsc po przecinku, podczas gdy drugi daje stałą liczbę cyfr znaczących.
Ponadto
toPrecision
zwróci notację naukową, jeśli liczba zawiera więcej cyfr całkowitych niż określona dokładność.EDYCJA: Och, a jeśli dopiero zaczynasz korzystać z JavaScript, gorąco polecam książkę „ JavaScript: The Good Parts ” autorstwa Douglasa Crockforda.
źródło
Przykłady mówią jasno:
źródło
Myślę, że najlepiej odpowiedzieć na to przykład.
Załóżmy, że masz następujące dane:
Chcesz wyświetlić każdy z tych produktów z tytułem i sformatowaną ceną. Spróbujmy
toPrecision
najpierw użyć :Wygląda dobrze, więc możesz pomyśleć, że będzie to działać również w przypadku innych produktów:
Nie zbyt dobrze. Możemy to naprawić, zmieniając liczbę cyfr znaczących dla każdego produktu, ale jeśli będziemy iterować po tablicy produktów, może to być trudne. Użyjmy
toFixed
zamiast:To daje to, czego się spodziewałeś. Nie wymaga zgadywania ani zaokrąglania.
źródło
Właśnie:
źródło
W pewnych okolicznościach
toPrecision()
zwróci notację wykładniczą, aletoFixed()
nie zwróci.źródło
toExponential()
to osobna funkcja .a = 999999999999999934464;
,a.toFixed(0)
powraca"1e+21"
. Być może dokładniejszą odpowiedzią byłoby to, że toFixed () nie zwraca notacji wykładniczej, chyba że toString () nie zwraca.Na przykład rozważamy zmienną a as, var a = 123.45 a.toPrecision (6) Wynik to 123.450 a.toFixed (6) Wynik ma postać 123.450000 // 6 cyfr po przecinku
źródło
Obie funkcje
toPrecision()
itoFixed()
są przeznaczone do formatowania liczby przed jej wydrukowaniem. Więc oba zwracająString
wartości.Jest jeden wyjątek. Jeśli używasz tych funkcji na ujemnym literale Number, ze względu na pierwszeństwo operatorów zwracana jest liczba. Oznacza to, że
toFixed()
lubtoPrecision()
zwróci najpierw ciąg, a następnie-
operator minus przekonwertuje ciąg z powrotem na liczbę jako wartość ujemną. Poniżej znajduje się przykład.toPrecision()
zwraca wartośćString
reprezentującą obiekt Number w notacji stałoprzecinkowej lub wykładniczej zaokrągloną do cyfr znaczących. Więc jeśli określisz, że chcesz mieć dokładność 1, zwraca pierwszą znaczącą liczbę wraz z notacją naukową wskazującą potęgi 10 lub poprzednie 0 przed przecinkiem, jeśli liczba znacząca jest <0.toFixed()
zwraca wartośćString
reprezentującą obiekt Number w notacji stałoprzecinkowej, zaokrągloną w górę. Ta funkcja dotyczy tylko liczb dziesiętnychWspomniałem powyżej o wyjątku, w którym użycie tych funkcji na ujemnych literałach liczbowych zwróci Number, a nie String ze względu na pierwszeństwo operatorów. Oto kilka przykładów:
Ciekawostka: widać zera ze znakiem
-0.0456.toFixed(1)
Zobacz: Czy +0 i -0 to to samo?
źródło