Number.prototype.myRound = function (decimalPlaces) {
var multiplier = Math.pow(10, decimalPlaces);
return (Math.round(this * multiplier) / multiplier);
};
alert((239.525).myRound(2));
Mathematisch wachsam sollte man sein 239.53 aber sein Geben 239.52 als Ausgabe. Also versuchte ich es mit .toFixed() Funktion & ich habe die richtige Antwort bekommen.
Aber wenn ich versuche, eine Antwort zu bekommen 239.575 es gibt wieder falsche ausgabe.
alert((239.575).toFixed(2));
Hier sollte Ausgabe sein 239.58 stattdessen sein Geben 239.57.
Dieser Fehler erzeugt einen geringfügigen Unterschied in der endgültigen Ausgabe. Also kann mir jemand helfen, das zu klären?
Interessant aber 239.375.toFixed(2) kehrt zurück "239.38" in Chrome 31 (Mac)… 🙂
– Vision
20. Dezember 2013 um 10:07 Uhr
mögliches Duplikat von Broken toFixed-Implementierung
– Vision
20. Dezember 2013 um 10:08 Uhr
@VisionN Nicht hier. Welchen Browser verwendest du? Ich bin auf dem neuesten FF auf Ubuntu.
– Cédric Reichenbach
20. Dezember 2013 um 10:10 Uhr
@CedricReichenbach Chrome 31 auf MacOS
– Vision
20. Dezember 2013 um 10:10 Uhr
Einfachere Lösung: Funktion zum Abschneiden auf Dezimalstellen
– David
25. Mai 2017 um 15:42 Uhr
Kumod Singh
Diese Methode ergibt ein sehr korrektes rundes Ergebnis.
function RoundNum(num, length) {
var number = Math.round(num * Math.pow(10, length)) / Math.pow(10, length);
return number;
}
Rufen Sie einfach diese Methode auf.
alert(RoundNum(192.168,2));
Es funktioniert gut. Es funktioniert für alle Bedingungen. Vielen Dank.
RoundNum(1.005,2) wird auf 1 gerundet, aber 1.01 erwartet
– Ein Kunin
23. Januar 2017 um 4:36 Uhr
Niet the Dark Absol
Intern kann 239,575 nicht exakt dargestellt werden. Binär wäre 0,575 so etwas wie 1/2 + 1/16 + 1/128 + 1/256 + ….
Es ist einfach so, dass das Ergebnis binär dargestellt wird leicht weniger als 239.575. Deswegen, Math.round rundet ab.
Versuchen Sie Folgendes, um dies zu demonstrieren:
alert(239.575 - 239.5)
Sie würden erwarten, dass das Ergebnis 0,075 ist, aber stattdessen erhalten Sie 0,07499999999998863.
Obwohl es wahr ist, habe ich noch nie so etwas gesehen ‘Probleme’ in anderen Sprachen… Das ist definitiv das, was in JavaScript verbessert werden muss.
– Vision
20. Dezember 2013 um 10:17 Uhr
@VisioN Dies gilt für jede Sprache, die Gleitkommazahlen mit doppelter Genauigkeit verwendet. Das sind fast alle, außer denen mit Festkomma- oder beliebig genauen Systemen.
– Niet the Dark Absol
20. Dezember 2013 um 10:19 Uhr
Srinath Mahé
Benutz einfach Math.round
function round(figureToRound){
var roundOff = Math.round((figureToRound* 100 ).toFixed(2))/100;
return roundOff;
}
console.log(round(1.005));
Dies hilft dem Rundungsproblem vollständig.
Funktioniert auf allen Fällen von mir. rund (239,575 – 239,5) 0,08 rund (239,575) 239,58 rund (239,525) 239,53 rund (1,005) 1,01
– Googamanga
27. Dezember 2017 um 16:58 Uhr
Funktioniert nicht für round(0.07499). Es gibt 0,08 statt 0,07 zurück
– dugokontov
28. Mai 2020 um 12:41 Uhr
round() wird den Trick tun. Versuchen Sie Folgendes:
Das Problem ist wahrscheinlich die Ungenauigkeit des Fließkommas, daher können Sie in verschiedenen Fällen unterschiedliche Ergebnisse erhalten (unterschiedliche Erfassung einer Zahl, unterschiedliche Browser usw.).
Interessant aber
239.375.toFixed(2)
kehrt zurück"239.38"
in Chrome 31 (Mac)… 🙂– Vision
20. Dezember 2013 um 10:07 Uhr
mögliches Duplikat von Broken toFixed-Implementierung
– Vision
20. Dezember 2013 um 10:08 Uhr
@VisionN Nicht hier. Welchen Browser verwendest du? Ich bin auf dem neuesten FF auf Ubuntu.
– Cédric Reichenbach
20. Dezember 2013 um 10:10 Uhr
@CedricReichenbach Chrome 31 auf MacOS
– Vision
20. Dezember 2013 um 10:10 Uhr
Einfachere Lösung: Funktion zum Abschneiden auf Dezimalstellen
– David
25. Mai 2017 um 15:42 Uhr