
Surendra
Ich habe die folgenden zwei Methoden verwendet:
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?

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));

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.

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.
round()
wird den Trick tun. Versuchen Sie Folgendes:
var v= Math.round(239.575 * 100) / 100;
alert(v);
Arbeitsgeige

Cédric Reichenbach
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.).
Siehe auch: toFixed(2) rundet “x.525” inkonsistent?

eisig
In meiner Software verwende ich diese:
(benötigen DecimalJS)
Number.prototype.toFixed = function(fixed) {
return (new Decimal(Number(this))).toFixed(parseFloat(fixed) ||
0);
};
var x = 1.005;
console.log( x.toFixed(2) ); //1.01
function bestRound(val, decimals){
decimals = decimals || 2;
var multiplier = Math.pow(10, decimals)
return Math.round((val * multiplier ).toFixed(decimals)) / multiplier;
}
bestRound(239.575 - 239.5) 0.08
bestRound(239.575) 239.58
bestRound(239.525) 239.53
bestRound(1.005) 1.01
10193400cookie-checkRundungsproblem in Math.round() & .toFixed()yes
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