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.
Antworten
Zu viele Anzeigen?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 :)
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);
}
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"
- See previous answers
- Weitere Antworten anzeigen