Oto scenariusz: dostaję, .9999999999999999
kiedy powinienem 1.0
.
Mogę sobie pozwolić na utratę miejsca dziesiętnego dokładności, więc używam .toFixed(15)
, który rodzaj działa.
Zaokrąglanie działa, ale problem polega na tym, że jestem podany 1.000000000000000
.
Czy istnieje sposób zaokrąglić do kilku miejsc po przecinku, ale usunąć dodatkowe spacje?
Uwaga: .toPrecision
nie jest tym, czego chcę; Chcę tylko określić, ile liczb po przecinku.
Uwaga 2: nie mogę po prostu użyć, .toPrecision(1)
ponieważ muszę zachować wysoką precyzję dla liczb, które faktycznie mają dane po przecinku. Idealnie byłoby, gdyby było dokładnie tyle miejsc po przecinku, ile potrzeba (do 15).
javascript
math
floating-point
rounding
Nathan
źródło
źródło
Odpowiedzi:
>>> parseFloat(0.9999999.toFixed(4)); 1 >>> parseFloat(0.0009999999.toFixed(4)); 0.001 >>> parseFloat(0.0000009999999.toFixed(4)); 0
źródło
-2.34.toFixed(1)
zwraca z-2.3
powodu pierwszeństwa operatora .parseFloat
funkcji:+number.toFixed(13)
tego wyrażenia można również użyć do usunięcia niedokładności numerów JavaScript, takich jak 1.0000000000000045.Tak, jest sposób. Użyj
parseFloat()
.parseFloat((1.005).toFixed(15)) //==> 1.005 parseFloat((1.000000000).toFixed(15)) //==> 1
Zobacz przykład na żywo tutaj: http://jsfiddle.net/nayish/7JBJw/
źródło
parseFloat("0.0000007")
, co daje"7e-7"
Jak rozumiem, chcesz usunąć końcowe zera w ciągu otrzymanym za pośrednictwem
toFixed()
. To jest czysta operacja na łańcuchu:var x = 1.1230000; var y = x.toFixed(15).replace(/0+$/, ""); // ==> 1.123
źródło
...replace(/\.?0+$/, "");
).0
staje się pustym łańcuchem""
i-0
staje się-
, z których żaden nie jest oczekiwany (przypuszczalnie). @ zach-snow Twoje sugerowane rozwiązanie również nie działa przy 0 i -0.Number(n.toFixed(15)) or +(n.toFixed(15))
zamieni ciąg dziesiętny zawierający 15 miejsc na liczbę, usuwając końcowe zera.źródło
Jeśli rzutujesz wartość zwracaną na liczbę, te końcowe zera zostaną usunięte. Jest to również mniej szczegółowe niż
parseFloat()
jest.+(4.55555).toFixed(2); //-> 4.56 +(4).toFixed(2); //-> 4
Ten wykorzystuje operator jednoargumentowy + , więc jeśli używasz to jako część operacji strun trzeba mieć Infix + przed nim:
var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));
. FYI jednoargumentowy + przed łańcuchem konwertuje go na liczbę. Z MDN: Unary + może:źródło
+(4.1).toFixed(4)
jest4.1
w Chrome 60 .Żadne z nich nie dało mi tego, czego szukałem na podstawie tytułu pytania, czyli na przykład 5,00 to 5, a 5,10 to 5,1. Moje rozwiązanie było następujące:
num.toFixed(places).replace(/\.?0+$/, '') '5.00'.replace(/\.?0+$/, '') // 5 '5.10'.replace(/\.?0+$/, '') // 5.1 '5.0000001'.replace(/\.?0+$/, '') // 5.0000001 '5.0001000'.replace(/\.?0+$/, '') // 5.0001
Uwaga: wyrażenie regularne działa tylko wtedy, gdy
places > 0
PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
źródło
5e30
(zmienia numer na5e3
). Narożne skrzynie są diaboliczne!Jest lepsza metoda, która zachowuje precyzję i usuwa zera. Pobiera liczbę wejściową i za pomocą jakiejś magii rzucania wyciągnie wszystkie końcowe zera. Odkryłem, że 16 to dla mnie limit precyzji, co jest całkiem niezłe, jeśli nie umieszczasz satelity na Plutonie.
function convertToFixed(inputnum) { var mynum = inputnum.toPrecision(16); //If you have a string already ignore this first line and change mynum.toString to the inputnum var mynumstr = mynum.toString(); return parseFloat(mynumstr); } alert(convertToFixed(6.6/6));
źródło
toFixed()
Sposób formatujenumber
korzystając stałoprzecinkowych notacji i zwracastring
.Stosuje strategię zaokrąglania do połowy w górę .
(0.124).toFixed(2); // returns 0.12 (0.125).toFixed(2); // returns 0.13
Jak opisałeś, czasami spowoduje to również (potencjalnie niepotrzebne) zera końcowe.
(0.001).toFixed(2); // returns 0.00
Możesz nie chcieć pozbyć się tych końcowych zer, w zasadzie możesz po prostu przekonwertować je z powrotem na
number
. Istnieje wiele sposobów, aby to zrobić.+(0.001).toFixed(2); // the shortest
Aby zapoznać się z przeglądem różnych metod konwersji ciągów znaków na liczby, sprawdź to pytanie, na które można znaleźć doskonałe odpowiedzi.
źródło