Lua: Runden von zahlen-und dann abschneiden
Welche ist die beste, die effizienteste Weg, um in der Runde eine Zahl und dann kürzen (entfernen von Dezimalstellen nach Aufrundung)?
zum Beispiel, wenn dezimal ist über 0.5 (0.6, 0.7, und so weiter), möchte ich aufrunden und dann kürzen (Fall 1). Ansonsten würde ich gerne kürzen (Fall 2)
for example:
232.98266601563 => after rounding and truncate = 233 (case 1)
232.49445450000 => after rounding and truncate = 232 (case 2)
232.50000000000 => after rounding and truncate = 232 (case 2)
InformationsquelleAutor user1624552 | 2013-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es kein build-in Mathe.round () - Funktion in Lua, aber können Sie Folgendes tun:
print(math.floor(a+0.5))
.InformationsquelleAutor Ola M
Einen trick, die nützlich für die Rundung auf Dezimalstellen anderen als ganze zahlen ergeben, übergeben Sie den Wert durch formatierten ASCII-text, und verwenden Sie die
%f
format-string angeben, die gewünschte Rundung. Zum BeispielRunden den beliebigen Wert in
exact
auf ein Vielfaches von 0,001.Ein ähnliches Ergebnis kann mit Skalierung vor und nach der Nutzung eines
math.floor()
odermath.ceil()
, sondern bekommen die Daten direkt nach Ihren Erwartungen an die Behandlung der Grenzfälle, kann schwierig sein. Nicht, dass dies nicht ein Problem mitstring.format()
, aber eine Menge Arbeit wurde investiert, so dass es zu produzieren "erwarteten" Ergebnissen.Rundung auf ein Vielfaches von etwas anderem als einer Zehnerpotenz wird noch skaliert werden muss, und hat immer noch alle kniffligen Sonderfälle. Ein Ansatz, der einfach auszusprechen und hat sich stabil Verhalten, ist zu schreiben
und zwicken Sie den genauen Zustand auf
frac
(und möglicherweise die Zeichen derexact
) um die Grenzfälle, die Sie wollte.InformationsquelleAutor RBerteig
Unterstützen, negative zahlen verwenden:
InformationsquelleAutor ggVGc
Sollte
math.ceil(a-0.5)
richtig zu verarbeiten, eine halbe-ganze zahlenfloor
und Ihre subtrahieren Sie einen halben undceil
einzuführen, die eine konsistente bias bei der genau die Hälfte. Und beide sind anders aus, fügen Sie die Hälfte und kürzen unter der Annahme, dass das abschneiden der in der Regel Runden in Richtung null. Die Implementierung der Runde auch Wert ist mehr "fair" in gewissem Sinne. Die Rundung ist voller Subtilität.InformationsquelleAutor Egor Skriptunoff
Hier ist eine Runde auf einer beliebigen Anzahl von Ziffern (0, wenn nicht definiert):
InformationsquelleAutor toma91
Für schlechte Rundung (schneiden Sie das Ende aus):
Gut, wenn Sie wollen, können Sie diese für gute Abrundung.
Erwartete Ergebnisse:
3
,3
,42
,5
,5
InformationsquelleAutor Hastumer