Javascript toFixed Funktion

8

Ich habe eine Frage bezüglich der Funktion toFixed (). Wenn ich einen Schwimmer z. - 3.123123423 und 0 . Wie kann ich es mit toFixed (2) in ein Eingabefeld ausgeben, so dass die Eingabefeldwerte 3.12 und 0 sind. Ich meine, wenn der Wert ganzzahlig ist, möchte ich es ausgeben, ohne nach .00 :)

    
faya 08.09.2009, 10:57
quelle

7 Antworten

11

Da es in JavaScript keinen Unterschied zwischen Ganzzahlen und Gleitkommazahlen gibt, hier mein Quick'n'Dirty-Ansatz:

%Vor%

Oder etwas Generisches:

%Vor%     
Fabian 08.09.2009, 11:13
quelle
4

Sie brauchen Math.round () nicht:

%Vor%     
Matthias 08.09.2009 11:45
quelle
2
%Vor%     
manji 08.09.2009 11:37
quelle
1

Beachten Sie, dass toFixed () IE ist gebrochen und in der Regel nicht verlässlich sein auf. Ärgerliche aber genau gerundete Ersatzfunktionen sind dort gegeben.

    
bobince 08.09.2009 11:53
quelle
1

Die Ergebnisse können bei anderen Browsern abweichen. Also siehe bitte diesen Link Wie schreibe ich einen Prototyp für Number .toFixed in JavaScript?

    
pramodc84 08.09.2009 11:56
quelle
1

Number.toFixed erzeugt einige mathematisch bizarre Ergebnisse und gibt Ihnen die Nachkommastellen, nach denen Sie gefragt haben, ob Sie sie benötigen oder nicht.

Math.round ist mathematisch korrekt, lässt aber keine Genauigkeit zu.

Hier ist eine Funktion, die mathematisch korrekt ist (Fliesskomma-Fehler werden ignoriert) und das gibt Ihnen, was Sie wollen.

%Vor%

Der Algorithmus ist: Scale up, so dass die gewünschten Ziffern links vom Dezimalpunkt liegen, addiere .5 (so dass & gt; = .5 an der ersten insignifikanten Stelle ein Inkrement des ganzzahligen Teils verursacht), < em> truncate (nicht rund!) und zurück skalieren. Es gibt die Möglichkeit, dass sich Gleitkommafehler einnisten, aber es ist eine bessere Sicht als die elende toFixed-Funktion.

Ausprobieren:

%Vor%

Wegen der Möglichkeit eines Gleitkommafehlers kann die Verkleinerung ein Ergebnis wie "3.00000000001" ergeben, was ärgerlich ist. So etwas sollte sich darum kümmern.

%Vor%

Sie haben den gewünschten Rundungsalgorithmus nicht klargestellt. Runden in Richtung Plus-Unendlichkeit ist die Rundung, die Sie in der Schule gelernt haben, wo Sie um & gt; = .5 aufwärts (d. H. In Richtung positiver Unendlichkeit). Ich glaube, dass in der Buchhaltung der richtige Rundungsalgorithmus (außerhalb der Schweiz und Argentinien zumindest) von Null entfernt ist. Einfach:

%Vor%

Wenn die Ergebnisse für die menschliche Präsentation sind, ist Intl.NumberFormat eine Möglichkeit, da Sie sowohl die minimale als auch die maximale Anzahl der Nachkommastellen angeben können. Zum Zeitpunkt des Schreibens ist es nicht gerade weit verbreitet und verwendet, vorausgesetzt, dass Chrome die Spezifikation korrekt implementiert, den gleichen undurchdringlichen und einfachen falschen Trunkierungsalgorithmus wie Fixed. Interessanterweise verwendet der "Währungs" -Stil roundAwayFromZero (oder rund um die Hälfte, wenn der Währungscode "CHF" ist, was eine nette Geste ist).

    
Chris Williams 12.10.2013 08:42
quelle
0

Hier ist eine Funktion, die ich mir ausgedacht habe, nachdem ich für eine Weile über dasselbe Problem nachgedacht habe:

%Vor%

Nach dieser Frage wird diese Funktion wie folgt zurückgegeben:

%Vor%

Beachten Sie, dass die Methode toFixed des JavaScript-Objekts Number tatsächlich ein String zurückgibt. Die obige Funktion toFixed gibt Number zurück. Wenn Sie lieber ein String haben möchten, verwenden Sie stattdessen Folgendes:

%Vor%     
Cory Gross 16.07.2013 08:36
quelle

Tags und Links