Lua: Arrondir les nombres, puis tronquer
Qui est le meilleur moyen efficace pour arrondir un nombre, puis de le tronquer (supprimer les décimales après arrondi)?
par exemple, si la décimale est supérieure à 0,5 (qui est, 0.6, 0.7, et ainsi de suite), je veux ronde et truncate (cas 1). Sinon, je tiens à tronquer (cas 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)
source d'informationauteur user1624552
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de formation en mathématiques.fonction round() en Lua, mais vous pouvez effectuer les opérations suivantes:
print(math.floor(a+0.5))
.Un truc qui est utile pour l'arrondi à la décimale chiffres autres que des nombres entiers est de passer de la valeur par le biais du texte ASCII formaté, et l'utilisation de la
%f
chaîne de format de préciser l'arrondissement souhaité. Par exemplearrondir la valeur arbitraire dans
exact
à un multiple de 0,001.Un résultat similaire peut être obtenu avec mise à l'échelle avant et après l'utilisation de l'un des
math.floor()
oumath.ceil()
mais les détails de la droite en fonction de vos attentes entourant le traitement des cas de bord peut être délicat. Non pas que ce n'est pas un problème avecstring.format()
mais beaucoup de travail a été accompli en faisant produire des résultats "escomptés".Arrondi à un multiple de quelque chose d'autre que d'une puissance de dix aura encore besoin de mise à l'échelle, et il a encore tout l'épineux cas de bord. Une approche qui est simple à exprimer et a un comportement stable est d'écrire
et de modifier l'état exact sur
frac
(et éventuellement le signe deexact
) pour obtenir le bord des cas, vous avez voulu.À soutenir également les nombres négatifs, utilisez ceci:
Devrait être
math.ceil(a-0.5)
afin de gérer correctement les demi-nombres entiersVoici un tour à un nombre arbitraire de chiffres (0 si non définie):
Pour les mauvaises arrondissement (couper l'extrémité):
Bien, si vous le souhaitez, vous pouvez étendre ce pour une bonne arrondissement.
Résultats attendus:
3, 3, 42, 5, 5.
A fonctionné pour moi 😀