Verringern Sie die Zahl der Dezimalstellen
In AS3, aus einer division erhalte ich eine Zahl wie diese: 0.9130406010219044.
Gibt es eine Möglichkeit, reduzieren Sie die Anzahl der Dezimalstellen (abgesehen von der Multiplikation, die Zahl von einer million)? Gibt es eine Möglichkeit, um die Zahl zu reduzieren, BEVOR die division durchgeführt?
InformationsquelleAutor | 2011-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe die folgende Funktion aus diesem link, die Runden auf eine beliebige Anzahl von Dezimalstellen:
Anmerkung: ich habe etwas geändert, die definition der Funktion durch das hinzufügen von Typen. Siehe den link für die Erklärung und original-source-code. Auch machte es zurück
theNumber
wenndecPlaces
ist weniger als oder gleich null ist.dies ist ernsthaft übertrieben.
Naja, nicht, wenn Sie sich sorgen über die Leistung. Die trim-Methode ist nur über drei mal schneller als toFixed(getestet durch ausführen der Methoden eine million mal mit demselben Wert und 2 Nachkommastellen - das gleiche Ergebnis, wenn ich es 10000 mal oder zehn Millionen mal zu), nicht einschließlich die toFixed-Konvertierung zurück zu Nummer erneut.
Bakapi, diese könnte sogar noch schneller: return Number(String(numberToTrim).substring(0,totalChars))...
Tatsächlich tun dies
Math.round(EVAL_NUMBER * 100) / 100;
ist mit Abstand die Schnellste Methode, der zweite ist dertrim
Methode oben, gefolgt vontoFixed
und mit Abstand die langsamste ist die Methode, mitsubstr
(die auch nicht rund und funktioniert nicht, wenn Sie mehr als eine Ziffer vor dem Dezimaltrennzeichen). Alle Methoden getestet, die durch denselben Ausdruck eine million mal.InformationsquelleAutor Bakapii
AS3-Dokumentation: Anzahl Klasse
myNumber = Number(myNumber.toFixed(2));
TheDarkin, ich weiß, Sie können dies tun, aber es ist eine unglaubliche Zahl-Methode gibt einen string zurück: in der Praxis, wenn ich konvertieren einer großen Zahl in eine Zeichenfolge und ich extrahiert einen substring bekomme ich die gleiche wie toFixed...
ich nehme an, es gibt gute Gründe, warum es in einen string konvertiert, aber vielleicht auch nicht. es wäre eine gute Frage, ALSO, wenn Sie fühlen, wie die Entsendung.
Gerade getan, danke.
InformationsquelleAutor TheDarkIn1978
Wenn Sie nur wollen, um das Ergebnis anzuzeigen (die Sie nicht angeben), dann ein einfaches bit der String-manipulation wird der Ertrag der Schnellste Ergebnis:
InformationsquelleAutor JonnyReeves
Werfen Sie einen Blick auf NumberFormatter.fractionalDigits -
Oder, wenn Sie in Flex: mx:NumberFormatter.Präzision /s:NumberFormatter.fractionalDigits -
InformationsquelleAutor Sam DeHaan
Versuchen, einige der Antworten hier für Größe:
Wie umgehen mit der Nummer Präzision in Actionscript?
Wenn Sie ein NumberFormatter, stellen Sie sicher, dass Sie die Rundung (es ist sehr wahrscheinlich, Sie wollen am nächsten).
InformationsquelleAutor octal9
Wenn Sie brauchen, Zahl als Ergebnis und der Leistung, ich würde sagen, dass diese Lösung effizienter ist als die Mathematik.pow()
Wenn Sie brauchen 3 Nachkommastellen ändern Sie einfach 100 von 1000.
Nachweis der Rundung :
In Bezug auf die Anzahl.toFixed() gibt einen String ich denke, es ist weil es gibt 2 Dezimalstellen in jedem Fall:
Zum Beispiel :
InformationsquelleAutor alan_langlois