I want to round up a number, for example: 4.9855 till 3 decimals, is there way to do that ?
As neither of the other posts actually rounded the number, only truncated, here's your answer.
The way to round any number to the closest whole number is as such:
local number = 12.513 local rounded = math.floor(number + .5) print(rounded) -- 13
Now, that might not seem useful, but it's actually the solution you want! All you have to do to round to something other than a whole number is to multiply by powers of ten:
local degree = 3 --Positive is decimal places to the right, negative is to the left. 0 is whole number local number = 23.15174246 local rounded = math.floor((number * 10^degree) + .5)*10^(-degree) print(rounded) -- 23.152
Now, this isn't perfect, but the only exception is this: when number
is negative, .5 exactly (on the degree given) rounds up to the number closer to 0, not down as is expected.
In order to fix this, we have to 'catch' whether the number is negative or positive, then round its absolute value:
local degree = 0 local number = -12.5 -- -13 is expected, as -.5 is closer to -1 than to 0 local neg = number < 0 and -1 or 1 local rounded = neg*math.abs(math.floor((number * 10^degree) + .5)*10^(-degree)) print(rounded) -- -13
Now, this is a very useful bit of code, but you may not want to have to paste all that code all over the place, so here's it in function form:
function roundNum(number, degree) if not number then error("Cannot round nil") end if not degree then degree = 0 end return (number < 0 and -1 or 1)*math.abs(math.floor((number * 10^degree) + .5)*10^(-degree)) end
EDIT: Just noticed I cancelled the power-of-ten multiplication before rounding the number, fixed it in all that applies to.
To round, the easiest way is to take the variable with the number you have.
number = string.sub(number, 1,5)
This makes it cut off at the first five in your example. If you need any more than that let me know.