2017-01-08 1 views
4

Étant donné un numéro du type 78.689 ou 1.12 par exemple, ce que je cherche est d'arrondir par programme le nombre à la dixième place après la virgule. J'essaye de faire ceci dans un environnement où il y a une fonction math.floor() qui arrondit au nombre entier le plus bas, et autant que je peux dire de la documentation il n'y a rien comme la fonction round() de PHP.Comment arrondir au dixième le plus proche?

+2

'chaîne.format ("%. 1f ", pourcentage * 100)' –

Répondre

7

Il y a simplement extrait à: http://lua-users.org/wiki/SimpleRound

function round(num, numDecimalPlaces) 
    local mult = 10^(numDecimalPlaces or 0) 
    return math.floor(num * mult + 0.5)/mult 
end 

Il se conduisent mal quand numDecimalPlaces est négatif, mais il y a d'autres exemples sur cette page.

0

Dans mon cas, j'essayais simplement de faire une représentation sous forme de chaîne de ce nombre ... cependant, j'imagine que cette solution pourrait aussi être utile aux autres.

string.sub(tostring(percent * 100), 1, 4) 

afin de le ramener à une représentation numérique, vous pouvez simplement appeler tonumber() sur le nombre résultant.

3

Vous pouvez utiliser la coercition pour cela ... Cela fonctionne comme printf ... Vous pouvez essayer de faire quelque chose comme dans cet extrait.

value = 8.9756354 
print(string.format("%2.1f", value)) 
-- output: 9.0 
1

Considérant que ce roblox, il serait tout simplement plus facile de faire une variable globale au lieu de faire un seul module ou créer votre propre Gloo.

_G.round = function(x, factor) 
    local factor = (factor) and (10^factor) or 0 
    return math.floor((x + 0.5) * factor)/factor 
end