Habe ich einen Standard-API-Aufruf verpasst, bei dem nachfolgende unbedeutende Nullen aus einer Zahl entfernt werden?
Ex.
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
Number.toFixed () und Number.toPrecision () sind nicht ganz das, wonach ich suche.
javascript
regex
math
numbers
Steven
quelle
quelle
1.234000 === 1.234
.parseFloat(n)
?Antworten:
Wenn Sie es in eine Zeichenfolge konvertieren, werden keine nachgestellten Nullen angezeigt, die nicht in der Variablen gespeichert sind, seit sie als Zahl und nicht als Zeichenfolge erstellt wurden.
quelle
var n = 1.245000000000001
(vorausgesetzt , es unbedeutend ist, Benutzer dargestellt werden)Ich hatte eine ähnliche Instanz, in der ich sie
.toFixed()
bei Bedarf verwenden wollte, aber ich wollte die Polsterung nicht, wenn sie nicht vorhanden war. Also habe ich parseFloat in Verbindung mit toFixed verwendet.toFixed ohne Polsterung
Eine weitere Option, die fast dasselbe tut.
Diese Antwort kann Ihnen bei Ihrer Entscheidung helfen
toFixed
rundet / füllt die Zahl auf eine bestimmte Länge, konvertiert sie aber auch in eine Zeichenfolge. Wenn Sie dies wieder in einen numerischen Typ konvertieren, wird die arithmetische Verwendung der Zahl nicht nur sicherer, sondern es werden auch automatisch nachfolgende Nullen gelöscht. Beispielsweise:Denn selbst wenn Sie eine Zahl mit nachgestellten Nullen definieren, werden sie gelöscht.
quelle
parseFloat(n).toFixed(4);
anstelle Ihrer eigentlichen Antwort gesehen. Es tut mir Leid.+(n.toFixed(4))
?Ich habe zuerst eine Kombination aus Matti-Lyra und Garys Antworten verwendet:
Ergebnisse:
Der etwas problematische Fall ist 0.10001. Am Ende habe ich diese längere Version verwendet:
Update : Und dies ist Garys neuere Version (siehe Kommentare):
Dies ergibt die gleichen Ergebnisse wie oben.
quelle
toFixed(4).replace(/([0-9]+(\.[1-9]+)?)(\.?0+$)/,"$1")
([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)
replace(/[,.][1-9]+(0+)/,'')
?Die
toFixed
Methode führt bei Bedarf die entsprechende Rundung durch. Es werden auch nachgestellte Nullen hinzugefügt, was nicht immer ideal ist.Wenn Sie den Rückgabewert in eine Zahl umwandeln, werden diese nachgestellten Nullen gelöscht. Dies ist ein einfacherer Ansatz als Ihre eigene Rundungs- oder Kürzungsmathematik.
quelle
toFixed
Aufruf signifikant gemacht haben ). Es ist ein seltsamer UX Edge-Fall.Ich hatte im Grunde die gleiche Anforderung und stellte fest, dass es für diese Funktionalität keinen eingebauten Mechanismus gibt.
Zusätzlich zum Trimmen der nachfolgenden Nullen musste ich auch die Ausgabe für das aktuelle Gebietsschema des Benutzers (dh 123.456.789) abrunden und formatieren.
Alle meine Arbeiten dazu wurden als prettyFloat.js (MIT Licensed) auf GitHub aufgenommen: https://github.com/dperish/prettyFloat.js
Anwendungsbeispiele:
Aktualisiert - August 2018
Alle modernen Browser unterstützen jetzt die ECMAScript Internationalization API , die sprachempfindlichen Zeichenfolgenvergleich, Zahlenformatierung sowie Datums- und Uhrzeitformatierung bietet.
Für ältere Browser können Sie diese Polyfüllung verwenden: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
quelle
Wie wäre es einfach mit einem solchen zu multiplizieren?
quelle
Sie können dies versuchen, um schwebende Zahlen zu minimieren
quelle
Reine Regex-Antwort
Ich frage mich, warum niemand einen gegeben hat!
quelle
Ich musste dieses Problem auch lösen, als Django Werte vom Typ Dezimal in einem Textfeld anzeigte. ZB wenn '1' der Wert war. Es würde '1.00000000' anzeigen. Wenn '1.23' der Wert wäre, würde '1.23000000' angezeigt (im Fall einer Einstellung von 'decimal_places' von 8)
Die Verwendung von parseFloat war für mich keine Option, da möglicherweise nicht genau derselbe Wert zurückgegeben wird. toFixed war keine Option, da ich nichts runden wollte, also habe ich eine Funktion erstellt:
quelle
Keine dieser Lösungen hat bei mir für sehr kleine Stückzahlen funktioniert. http://numeraljs.com/ hat das für mich gelöst.
quelle
Wenn Sie Floats aus irgendeinem Grund nicht verwenden können (z. B. bei Geld-Floats) und bereits von einer Zeichenfolge ausgehen, die eine korrekte Zahl darstellt, ist diese Lösung möglicherweise hilfreich. Es konvertiert eine Zeichenfolge, die eine Zahl darstellt, in eine Zeichenfolge, die eine Zahl ohne nachgestellte Nullen darstellt.
quelle
Nachdem ich alle Antworten - und Kommentare - gelesen hatte, kam ich zu folgendem Ergebnis:
Ich weiß mit
eval
irgendwie schädlich sein kann, aber das hat mir sehr geholfen.So:
Wenn Sie die Dezimalstellen begrenzen möchten, verwenden Sie,
toFixed()
wie in anderen angegeben.Das ist es.
quelle
Ich musste alle nachgestellten Nullen entfernen, aber mindestens 2 Dezimalstellen, einschließlich aller Nullen , beibehalten.
Die Zahlen, mit denen ich arbeite, sind 6 Dezimalzahlen, die von .toFixed (6) generiert werden.
Erwartetes Ergebnis:
Lösung:
Logik:
Führen Sie die Schleifenfunktion aus, wenn das letzte Zeichen der Zeichenfolge eine Null ist.
Entfernen Sie das letzte Zeichen und aktualisieren Sie die Zeichenfolgenvariable.
Wenn das letzte Zeichen der aktualisierten Zeichenfolge keine Null ist, beenden Sie die Schleife.
Wenn die aktualisierte Zeichenfolge des vorletzten Zeichens eine Gleitkomma-Endschleife ist.
quelle
Hier ist eine mögliche Lösung:
quelle
parseFloat()
wird sehr angemessen sein.Nur eine einfache mathematische Alternative zur Verwendung
toFixed
quelle