Javascript toFixed() – Zahl als String mit Nachkommastellen

Javascript tofixed erzeugt einen String

toFixed () formatiert eine Gleitkommazahl (floating point) zu einen String mit einer festen Zahl von Nachkommastellen. tofixed hängt Nullen an, um eine bestimmte Zahl von Nachkommastellen zu erreichen, z.B. um aus € 4,5 ordentliche € 4,50 zum machen.

18-12-15 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

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.

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

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

toFixed gibt String zurück

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

let num = 102.50023;
let rounded = num.toFixed(2);
console.log ("check typeof" + " " + typeof(rounded));

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

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.

Nur wenn die Programmiersprache eine Langzahlarithmetik-Library (Arbitrary-Precision Arithmetic) nutzt, die Zahlen als Text speichert, würde Runden zuverlässig funktionieren.

Quelle Stackoverflow: Reliable JS rounding numbers with toFixed(2) of a 3 decimal number

toFixed vs Math.round

Math.round(x) – eine andere Funktion zum Runden von Zahlen – erscheint zwar in den meisten Fällen zuverlässiger zu runden, aber rundet ebenfalls nicht zuverlässig kaufmännisch ab oder auf (?).

console.log (Math.round(1.275 * 100 ) / 100); // gibt 1.27 anstelle von 1.28 zurück

Anders als toFixed gibt Math.round keine Zeichenkette, sondern eine Zahl zurück. Nachkommastellen werden durch Teilen und Multiplizieren mit 100, mit 1000 für drei Stellen hinter dem Punkt erzielt.