Hier ist das Szenario: Ich bekomme, .9999999999999999
wann ich bekommen sollte 1.0
.
Ich kann es mir leisten, eine Dezimalstelle der Genauigkeit zu verlieren, also benutze ich .toFixed(15)
, welche Art von Arbeit.
Die Rundung funktioniert, aber das Problem ist, dass ich gegeben bin 1.000000000000000
.
Gibt es eine Möglichkeit, auf mehrere Dezimalstellen zu runden, aber zusätzliche Leerzeichen zu entfernen?
Hinweis: .toPrecision
ist nicht das, was ich will; Ich möchte nur angeben, wie viele Zahlen nach dem Dezimalpunkt stehen.
Hinweis 2: Ich kann nicht einfach verwenden, .toPrecision(1)
da ich die hohe Genauigkeit für Zahlen beibehalten muss, deren Daten tatsächlich nach dem Dezimalpunkt liegen. Im Idealfall gibt es genau so viele Dezimalstellen wie nötig (bis zu 15).
quelle
Antworten:
quelle
-2.34.toFixed(1)
Rückgabe-2.3
aufgrund der Priorität des Operators .parseFloat
Funktion:+number.toFixed(13)
Dieser Ausdruck kann auch verwendet werden, um Ungenauigkeiten der JavaScript-Nummer wie in 1.0000000000000045 zu entfernen.Ja, es gibt einen Weg. Verwenden Sie
parseFloat()
.Ein Live-Beispiel finden Sie hier: http://jsfiddle.net/nayish/7JBJw/
quelle
parseFloat("0.0000007")
, was gibt"7e-7"
Soweit ich weiß, möchten Sie die nachgestellten Nullen in der Zeichenfolge entfernen, die Sie über erhalten haben
toFixed()
. Dies ist eine reine Zeichenfolgenoperation:quelle
...replace(/\.?0+$/, "");
).0
die leere Zeichenfolge""
wird und-0
wird-
, von denen keine erwartet wird (bei einer Vermutung). @ zach-snow Ihre vorgeschlagene Lösung schlägt auch bei 0 und -0 fehl.Number(n.toFixed(15)) or +(n.toFixed(15))
konvertiert die 15-stellige Dezimalzeichenfolge in eine Zahl und entfernt nachfolgende Nullen.quelle
Wenn Sie den Rückgabewert in eine Zahl umwandeln, werden diese nachgestellten Nullen gelöscht. Dies ist auch weniger ausführlich als es
parseFloat()
ist.Dies verwendet den unären Operator +. Wenn Sie diesen als Teil einer Zeichenfolgenoperation verwenden, müssen Sie ein Infix + davor haben :
var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));
. Zu Ihrer Information, ein unäres + vor einem String konvertiert es in eine Zahl. Von MDN: Unary + kann:quelle
+(4.1).toFixed(4)
ist4.1
in Chrome 60 .Keines davon hat mir wirklich das gebracht, wonach ich gesucht habe, basierend auf dem Fragentitel, der zum Beispiel für 5,00 zu 5 und 5,10 zu 5,1 war. Meine Lösung war wie folgt:
Hinweis: Die Regex funktioniert nur, wenn
places > 0
PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
quelle
5e30
(ändert die Nummer in5e3
). Eckfälle sind teuflisch!Es gibt eine bessere Methode, die die Präzision beibehält und auch die Nullen entfernt. Dies erfordert eine eingegebene Nummer und zieht durch etwas Magie des Castings alle nachgestellten Nullen ab. Ich habe festgestellt, dass 16 die Genauigkeitsgrenze für mich ist, was ziemlich gut ist, wenn Sie keinen Satelliten auf Pluto setzen.
quelle
Die
toFixed()
Methode formatiert a unternumber
Verwendung der Festkommanotation und gibt a zurückstring
.Es wird eine Rundungsstrategie angewendet.
Wie Sie beschrieben haben, führt dies in der Tat manchmal auch zu (möglicherweise unnötigen) nachgestellten Nullen.
Möglicherweise möchten Sie diese nachgestellten Nullen nicht entfernen. Im Wesentlichen können Sie sie einfach wieder in a konvertieren
number
. Es gibt viele Möglichkeiten, dies zu tun.Um einen Überblick über die verschiedenen Methoden zum Konvertieren von Zeichenfolgen in Zahlen zu erhalten, überprüfen Sie bitte diese Frage, die einige hervorragende Antworten enthält.
quelle