Mam pytanie dotyczące funkcji FIXed(). Jeśli mam float np. - 3.123123423 i . Jak mogę wyprowadzić go do pola wejściowego za pomocą opcji ToFixed (2), aby wartości wejściowe były następujące: 3.12 i . To znaczy, jeśli wartość jest liczbą całkowitą Chcę wyjście bez spływu .00 :)Javascript toFixed function
Odpowiedz
Ponieważ nie ma żadnej różnicy między całkowitymi i pływa w JavaScripcie, tutaj jest moje podejście quick'n'dirty:
theNumber.toFixed(2).replace(".00", "");
Albo coś ogólna:
myToFixed = function (n, digits) {
digits = digits || 0;
return n.toFixed(digits).replace(new RegExp("\\.0{" + digits + "}"), "");
}
myToFixed(32.1212, 2) --> "32.12"
myToFixed(32.1212, 0) --> "32"
myToFixed(32, 2) --> "32"
myToFixed(32.1, 2) --> "32.10"
Bardzo brudne (i bardzo szybkie.) ... +1 –
Nie działa dla 3.005 (oznacza, że jest liczbą całkowitą). – Mark
function toFixed0d(x, d)
{
if(Math.round(x) == x)
{
return x.toString();
}else
{
return x.toFixed(d);
}
}
toFixed0d(3.123123423, 2) = "3.12"
toFixed0d(0, 2) = "0"
nie trzeba Math.round():
var toFixed = function(val, n) {
var result = val.toFixed(n);
if (result == val)
return val.toString();
return result;
}
toFixed(3.123, 2) --> "3.12"
toFixed(3, 2) --> "3"
Należy pamiętać, że toFixed() to broken in IE i generalnie nie można polegać na nim. Daje to irytujące, ale dokładnie zaokrąglone funkcje zastępcze.
Wyniki mogą się różnić w przypadku innych przeglądarek. Więc proszę zobaczyć ten link How to write a prototype for Number.toFixed in JavaScript?
Oto funkcja wpadłem po myśli o tym samym problemem na chwilę:
function toFixed (number, n) {
return parseFloat(number.toFixed(n));
}
Jak na to pytanie, to funkcja zwróci się następująco:
toFixed(3.123123423, 2);
> 3.12
toFixed(0, 2);
> 0
toFixed(3.1, 2);
> 3.1
toFixed(3.005, 2);
> 3
toFixed(3.005, 3);
> 3.005
toFixed(3.0500, 4);
> 3.05
Należy pamiętać, że metoda toFixed
obiektu JavaScript obiektu Number
faktycznie zwraca wartość String
. Powyższa funkcja toFixed
zwróci wartość Number
. Jeśli wolisz mieć String
następnie użyć następujących zamiast:
function toFixed (number, n) {
return parseFloat(number.toFixed(n)).toString();
}
Number.toFixed produkuje pewne dziwaczne wyniki matematycznie i daje cyfr ułamkowych prosiłeś, czy są potrzebne czy nie.
Math.round jest matematycznie poprawny, ale nie pozwala określić precyzji.
Oto funkcja, która jest matematycznie poprawna (pomijając błędy zmiennoprzecinkowe) i daje to, co chcesz.
var roundToPlusInfinity = function(n, fd) {
var scale = Math.pow(10, fd),
rounded = fd ? Math.floor((n * scale + 0.5))/scale :
Math.round(n);
return rounded.toString();
};
Algorytm jest: skalowanie w górę, tak aby cyfry chcesz się po lewej stronie przecinka dziesiętnego, dodać .5 (tak,> = 0,5 w pierwszym nieistotne miejsce powoduje przyrost części całkowitej), skrócić (nie okrągłe!) I skalować z powrotem. Istnieje możliwość pojawienia się błędów zmiennoprzecinkowych, ale jest to lepszy widok niż nędzna funkcja FIXed.
Testowanie go:
roundToPlusInfinity(5.53335, 4); // "5.3334"
roundToPlusInfinity(-9999.95, 1); // "-9999.9"
roundToPlusInfinity(3.00015, 3); // "3"
Ze względu na możliwość błędu pływający punkt, w dół, skala może dać wynik jak „3.00000000001”, co jest denerwujące. Coś takiego powinno zająć się tym.
var trimFraction = function(s, fd) {
var splitPoint = s.indexOf('.');
if (splitPoint === -1) {
return s;
}
var f = s.substring(splitPoint + 1, s.length),
i = s.substring(0, splitPoint);
if (f.length > fd) {
f = f.substring(0, fd).replace(/0+$/, "");
}
if (f) {
return i + '.' + f;
}
return i;
};
trimFraction("3.1000000001", 2); // "3.1"
Nie sprecyzowałeś algorytmu zaokrąglania, który chcesz. Okrąg w kierunku plus nieskończoności to zaokrąglenie, którego nauczyłeś się w szkole, gdzie okrążasz> = .5 do (tj. W kierunku dodatniej nieskończoności). Uważam, że w rachunkowości prawidłowy algorytm zaokrąglania (poza Szwajcarią i Argentyną przynajmniej) jest zera. Proste:
var roundAwayFromZero = function(n, fd) {
var ret = roundToPlusInfinity(Math.abs(n), fd);
return (n < 0) ? '-' + ret : ret;
};
roundAwayFromZero(-9999.95, 1); // "-10000"
Jeśli wyniki są dla ludzkiego prezentacji Intl.NumberFormat możliwość, ponieważ można określić zarówno minimalną i maksymalną liczbę cyfr ułamkowych. W chwili pisania tego artykułu nie jest on dokładnie obsługiwany i, zakładając, że Chrome poprawnie implementuje specyfikację, używa tego samego nieprzeniknionego i prostego, niewłaściwego algorytmu obcięcia, jak wFixed. Co ciekawe, styl "waluty" używa roundAwayFromZero (lub zaokrąglenia do połowy, jeśli kod waluty to "CHF", co jest miłym akcentem).
- 1. Javascript toFixed equivalent in java
- 2. nie .toFixed dla .0 *
- 3. JavaScript URL Decode function
- 4. function()() in javascript
- 5. (function() {})() deklarowania/inicjowanie funkcji javascript
- 6. Wzory javascript: Kontekst Function Call
- 7. Dlaczego Firebug mówi toFixed() nie jest funkcją?
- 8. Co robi funkcja "return function() {...}" w JavaScript?
- 9. Składnia funkcji JavaScript Wyjaśnienie: function object.myFunction() {..}
- 10. toFixed (2) runduje "x.525" niekonsekwentnie?
- 11. Jaka jest różnica pomiędzy $ (document) .ready (function() i $ (function()
- 12. jQuery $ (function() {inicjalizacji
- 13. Konwertowanie funkcji boost :: function na std :: function
- 14. Dlaczego używać (function() {....}());
- 15. Problem z .toISOString function()
- 16. `as.na` function
- 17. Javascript: wydajność var functionName = function() {} vs funkcji functionName() {}
- 18. Dziwny JavaScript idiom - co robi "/xyz/.test(function(){xyz;})" zrobić?
- 19. Zobacz viewModel w javascript function poza viewModel zakresu
- 20. JavaScript Function - Konwersja kod do geolokalizacji ulicy Adress
- 21. Cordova Android Uncaught Function Error
- 22. Object vs Class vs Function
- 23. Jaka jest różnica między on ("click", function()) i onclick = "function();"?
- 24. VB.NET Generic Function
- 25. array_walk anonymous function
- 26. data.tables and sweep function
- 27. djb2 Hash Function
- 28. @ (at) symbols preg_replace function
- 29. OpenCV Mat :: one function
- 30. Pandy: grep like function
Możesz chcieć określić, co chcesz zrobić dla wersji 3.1 i 3.005. – Mark
jak o 'parseFloat ((wartość) .toFixed (2))' –