How to round to 2 Decimal places?

I got a Value that = 0.984375, and I want it to be rounded to 2 decimals: 0.98
How would I do this?

3 Likes

You could just make a new string of the num, using string.sub, then convert it back to a number

For example,

local number = 0.984375 --original number

local newnumber = string.sub(tostring(number), 1,4)
newnumber = tonumber(newnumber)

To make this a function, do the following:

local function convert(num)
    local newnumber = string.sub(tostring(num), 1,4)
	newnumber = tonumber(newnumber)
	print(newnumber)
end

convert(0.923878327)

There’s probably better ways of doing it, but that’s just 1 way. I would recommend using @SuperSpeedy101’s way, because it’s more efficient and easier.

12 Likes

Multiply the value by 100
then use math.floor(value)
then divide by 100

example

local value = 0.984375
value *= 100
value = math.floor(value)
value = value / 100
54 Likes

I have an alternative to superspeedy101’s answer:

math.round(number*100)/100

it works, i tested it.

14 Likes

Yes that does work, however math.round is rounding (either doing floor or ceil depending on the decimals) which might have a performance cost and possibly floating point jank, but overall it seems to work the same.

In summary:

Using Luau: math.round(number*100)/100 or math.floor(value*100)/100

Using just Lua: math.floor(value*100)/100 (There is no math.round in vanilla lua)

2 Likes

i see. the only differece is that normal lua doesnt use “math.round” in it’s code.

1 Like

i think i made or pasted a function a while ago to round numbers by decimal places

function math_round(n: number, scale: number?)
    return tonumber(string.format("%." .. (typeof(scale) == "number" and scale or 2) .. "f", n))
end

not sure why math.round doesn’t have a second param by default

7 Likes

sorry to necro, but do you know how i can get this rounded number without a decimal, using the output for an ID but i cant have a decimal, just the numbers

Confusing but, simple

math.round()?

rounds a number without any decimals

i want to take the number and just remove the .

example, i have 5.3892384937, it goes to 5.389, this then goes to 5389

Here’s my function to round numbers to whatever decimal places you want them to.


local function RoundNumber(Number, NumberDecimalPlaces)

	local Rounding = math.floor

	local Digits



	if Number < 0 then
		Number -= (1/(10^(NumberDecimalPlaces+1)))
		Digits = math.ceil(math.log10(math.clamp(Number *-1,0,math.huge)))
		Rounding = math.ceil
	else
		Number += (1/(10^(NumberDecimalPlaces+1)))
		Digits = math.ceil(math.log10(math.clamp(Number,0,math.huge)))
	end


	local Result = Rounding(Number*(10^NumberDecimalPlaces))/(10^NumberDecimalPlaces)

	return Result 

end

print(RoundNumber(-10.52321,2))
1 Like

My initial just thought to do this would be convert it to a string, remove the decimal from the string, and then convert it back to a number.

Also, if you would like to continue this conversation, please open a new thread or go to DMS

textstring.format("%.f2", yourstring)
--[[                  ^
Allows however many decimals that the number is.
--]]

A simple solution.

3 Likes