norro: Math.round()

Hi,

Ziel ist es, eine Dezimalzahl mit zwei Nachkommastellen zu erzeugen. Ich nutze dazu die Funktion Math.round, die ich wie folgt anwende:

var output = Math.round(parseFloat(input)*100)/100;

So runde ich die um Faktor 100 erweiterte Zahl und müsste dann als Ergebnis durch die anschließende Division die gewünscht formatierte Zahle erhalten.
Dies funktioniert im Regelfall auch, häufig erhalte ich allerdings z.B.
wenn 1.67 herauskommen sollte 1.66666666669
wenn 2.02 herauskommen sollte 2.01111111119
usw.

Wie ist das zu erklären? Gibt es eine bessere Möglichkeit, an die gewünschte Formatierung der Zahl zu kommen?

Gruß,

norro

  1. hi,

    So runde ich die um Faktor 100 erweiterte Zahl und müsste dann als Ergebnis durch die anschließende Division die gewünscht formatierte Zahle erhalten.
    Dies funktioniert im Regelfall auch, häufig erhalte ich allerdings z.B.
    wenn 1.67 herauskommen sollte 1.66666666669
    wenn 2.02 herauskommen sollte 2.01111111119
    usw.

    Wie ist das zu erklären?

    damit, dass beim umwandeln vom binärsystem, mit welchem jeder digitale rechner intern arbeitet, ins dezimalsystem, welches du als mensch für lesbarer erachtest, zwangsweise rundungsfehler auftreten, da ist nicht-endliche dezimalbrüche idR. nicht durch endliche binärzahlen darstellen lassen.

    gruß,
    wahsaga

    --
    Rest in peace, Dimebag!
    #
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Sup!

    Vielleicht wäre die Methode toFixed() irgendwie schlauer.

    Gruesse,

    Bio
    ---
    Ach was!