Nie mam pojęcia, jak to zrobić? Dodam liczby przecinkami, wynik jest oczywiście zawsze liczbą ze zdecydowanie zbyt dużą liczbą cyfr po przecinku. ktoś?
javascript
math
rounding
Sten Van den Bergh
źródło
źródło
Odpowiedzi:
EDYCJA 2 :
Użyj metody
Number
obiektu w następującytoFixed
sposób:var num = Number(0.005) // The Number() only visualizes the type and is not needed var roundedString = num.toFixed(2); var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)
Zaokrągla 42,0054321 do 42,01
Zaokrągla od 0,005 do 0,01
Zaokrągla od -0,005 do -0,01 (więc wartość bezwzględna rośnie wraz z zaokrągleniem do granicy 0,5)
Przykład jsFiddle
źródło
3.1415
staje się3.00
w twoim przykładzie.AKTUALIZACJA: Należy pamiętać, że w momencie, gdy odpowiedź została napisana po raz pierwszy w 2010 r., Funkcja poniżej toFixed () działała nieco inaczej. ToFixed () wydaje się teraz dokonywać pewnych zaokrągleń, ale nie w ściśle matematyczny sposób. Więc uważaj na to. Wykonaj swoje testy ... Metoda opisana poniżej sprawdzi się dobrze, zgodnie z oczekiwaniami matematyka.
toFixed()
- metoda konwertuje liczbę na łańcuch, zachowując określoną liczbę miejsc po przecinku. W rzeczywistości nie zaokrągla liczby w górę, lecz ją obcina.Math.round(n)
- zaokrągla liczbę do najbliższej liczby całkowitej. Tak więc obracając:0,5 -> 1; 0,05 -> 0
więc jeśli chcesz zaokrąglić, powiedz liczbę 0,55555, tylko do drugiego miejsca po przecinku; możesz wykonać następujące czynności (jest to koncepcja krok po kroku):
0.55555 * 100
= 55,555Math.Round(55.555)
-> 56.00056.000 / 100
= 0,56000(0.56000).toFixed(2)
-> 0,56a to jest kod:
(Math.round(number * 100)/100).toFixed(2);
źródło
To zadziałało dla mnie:
var new_number = float.toFixed(2);
Przykład:
var my_float = 0.6666 my_float.toFixed(3) # => 0.667
źródło
0.6666.toFixed(3)
staje się0.666
zamiast0.667
. @Andrei wydaje się mieć właściwe rozwiązanie do prawidłowego zaokrąglania.toFixed()
działa perfekcyjnie:0.6666.toFixed(3) # => 0.667
. Dodam to do twojej odpowiedzi.Poprzednie odpowiedzi zapomniały ponownie wpisać dane wyjściowe jako liczbę. W zależności od upodobań można to zrobić na kilka sposobów.
+my_float.toFixed(2) Number(my_float.toFixed(2)) parseFloat(my_float.toFixed(2))
źródło
To nie jest naprawdę przyjazne dla procesora, ale:
Math.round(number*100)/100
działa zgodnie z oczekiwaniami.
źródło
Chociaż mamy tutaj wiele odpowiedzi z wieloma przydatnymi sugestiami, w każdej z nich nadal brakuje pewnych kroków.
Oto kompletne rozwiązanie opakowane w małą funkcję:
function roundToTwoDigitsAfterComma(floatNumber) { return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2)); }
Na wypadek gdybyś był zainteresowany, jak to działa:
toFixed(2)
aby zachować 2 cyfry po przecinku i wrzucić inną bezużyteczną częśćparseFloat()
funkcji jakotoFixed(2)
zwracanego ciąguUwaga: jeśli zachowujesz ostatnie 2 cyfry po przecinku, ponieważ pracujesz z wartościami pieniężnymi i wykonujesz obliczenia finansowe, pamiętaj, że to nie jest dobry pomysł i lepiej zamiast tego użyj wartości całkowitych.
źródło
użyj poniższego kodu.
alert(+(Math.round(number + "e+2") + "e-2"));
źródło
Używam tego:
function round(value, precision) { if(precision == 0) return Math.round(value); exp = 1; for(i=0;i<precision;i++) exp *= 10; return Math.round(value*exp)/exp; }
źródło