Javascript toFixed() – Zahl als String mit Nachkommastellen

toFixed () formatiert Gleitkommazahlen (floating point) zu Strings mit fester Zahl von Nachkommastellen. tofixed () hängt Nullen für eine bestimmte Zahl von Nachkommastellen an, z.B. um aus € 4.5 ordentliche € 4.50 zum machen. Aber für die Anzeige beim kaufmännischen Rechnen ist Intl.NumberFormat heute DER Standard.

Javascript tofixed erzeugt einen String

Zahl zu String

Javascript toFixed () wirkt auf einer Zahl als Eingabe und gibt einen String zurück. Nützlich, wenn als Ergebnis Euro oder andere Währung verlangt ist.

const anum = 10;
const ares = anum.toFixed(2); // gibt 10.00 zurück

const bnum = 598.2405;
const bres = bnum.toFixed(3); // rundet die vierte Stelle ab 
						     // und gibt 598.240 zurück 

toFixed gibt einen String zurück

Dass toFixed tatsächlich einen String und kein Floating Point liefert, zeigt der typeof-Operator.

const num = 102.50023;
const rounded = num.toFixed(2);
console.log (`check typeof ${rounded} ${typeof(rounded)}`);

check typeof 102.50 string

Nachkommastellen auffüllen

Wenn mehr Stellen als vorhandene Nachkommastellen gefordert sind (z.B. immer zwei Nachkommastellen), hängt toFixed die gewünschte Zahl von "0" an

console.log ((89).toFixed(2));

liefert


89.00

Intl.NumberFormat

Was das kaufmännische Runden angeht: Da ist toFixed unzuverlässig. Das kaufmännische Runden nach DIN 1333 (oder Bürgerliches Runden) rundet bei 0,1,2,3 oder 4 ab, bei 5,6,7,8 und 9 auf.

Mit toFixed funktioniert das mal und mal nicht … 

console.log ((80.50).toFixed(0)); // 81 – korrekt
console.log ((80.50).toFixed());  // 81 – korrekt

aber

mynum = 1.275;
console.log ("toFixed " + mynum.toFixed(2))  // sollte 1.28 sein

1.275 hat zwar eine endliche Zahl von Stellen, aber wird periodisch, wenn die Zahl zur Basis 2 konvertiert wird, und kann darum nicht exakt dargestellt werden.

.toFixed rundet binär, nicht dezimal, denn JavaScript nutzt IEEE-754.

(2.675).toFixed(2); // 2.67 statt 2.68
console.log ((2.675).toFixed(2))

2.675 ist intern nicht exakt darstellbar. Darum empfiehlt sich Intl.NumberFormat als Standard für die Anzeige auf der Webseite anstelle von .toFixed.

const fmt = new Intl.NumberFormat('de-DE', {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});

fmt.format(2.675); // "2,68"
console.log ("Intl.NumberFormat", fmt.format(2.675))

Für debug-Ausgaben, einfache Anzeigen, Charts und Logs ist toFixed heute noch OK, aber nicht für Geldbeträge, Rechnungen, Steuern.

Suchen auf mediaevent.de