498 Stimmen

Wie formatiert man einen Float in Javascript?

Wie kann ich in JavaScript bei der Konvertierung von einer Fließkommazahl in eine Zeichenkette nur 2 Stellen nach dem Dezimalpunkt erhalten? Zum Beispiel 0,34 anstelle von 0,3445434.

959voto

Tim Büthe Punkte 60908

Es gibt Funktionen zum Runden von Zahlen. Zum Beispiel:

var x = 5.0364342423;
print(x.toFixed(2));

wird 5.04 gedruckt.

EDIT。 Geige

258voto

kkyy Punkte 11874
var result = Math.round(original*100)/100;

Die Besonderheiten für den Fall, dass der Code nicht selbsterklärend ist.

edit: ...oder verwenden Sie einfach [toFixed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) wie vorgeschlagen von Tim Büthe . Das habe ich vergessen, danke (und ein Upvote) für die Erinnerung :)

196voto

Christoph Punkte 157217

Seien Sie vorsichtig bei der Verwendung von toFixed() :

Erstens wird die Rundung der Zahl anhand der binären Darstellung der Zahl vorgenommen, was zu unerwartetem Verhalten führen kann. Zum Beispiel

(0.595).toFixed(2) === '0.59'

anstelle von '0.6' .

Zweitens gibt es einen IE-Bug mit toFixed() . Im IE (zumindest bis Version 7, IE8 habe ich nicht überprüft) gilt Folgendes:

(0.9).toFixed(0) === '0'

Es könnte eine gute Idee sein, dem Vorschlag von kkyy zu folgen oder eine benutzerdefinierte toFixed() Funktion, z.B.

function toFixed(value, precision) {
    var power = Math.pow(10, precision || 0);
    return String(Math.round(value * power) / power);
}

51voto

qbolec Punkte 5016

Ein weiteres Problem, das zu beachten ist, ist, dass toFixed() kann zu unnötigen Nullen am Ende der Zahl führen. Zum Beispiel:

var x=(23-7.37)
x
15.629999999999999
x.toFixed(6)
"15.630000"

Die Idee ist, die Ausgabe mit einer RegExp :

function humanize(x){
  return x.toFixed(6).replace(/\.?0*$/,'');
}

El RegExp passt die nachgestellten Nullen (und optional das Dezimalkomma) an, um sicherzustellen, dass es auch für ganze Zahlen gut aussieht.

humanize(23-7.37)
"15.63"
humanize(1200)
"1200"
humanize(1200.03)
"1200.03"
humanize(3/4)
"0.75"
humanize(4/3)
"1.333333"

12voto

Ilya Birman Punkte 9114
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X