Commas to numbers with decimal support

local function AddCommas(Number:string)
	Number = tostring(Number)
	if Number:len() <= 3 then return Number end

	Number = Number:reverse()

	local Decimals:string
	local NewString:string

	for i = 1, Number:len() do
		local character = Number:sub(i, i)
		if character == "." then
			Decimals = Number:sub(1, i)
			Number = Number:sub(i+1, Number:len())
			break
		end
	end
	
	local Key = 0
	while Number:len() > 0 do
		Key += 1
		
		if Key > 3 then
			if Number:sub(Key, Number:len()):len() == 0 then
				NewString = `{NewString or ""}{Number:sub(1, 3)}`
			else
				NewString = `{NewString or ""}{Number:sub(1, 3)},`
			end
			Number = Number:sub(Key, Number:len())
			Key = 1
		end
	end

	Number = `{Decimals or ""}{NewString or ""}{Number or ""}`
	Number = Number:reverse()

	return Number
end

:fish:

4 Likes

:fish:

2 Likes

local function AddCommas(Number:string)
	Number = tostring(Number)
	if Number:len() <= 3 then return Number end

	Number = Number:reverse()

	local Decimals:string
	local NewString:string

	for i = 1, Number:len() do
		local character = Number:sub(i, i)
		if character == "." then
			Decimals = Number:sub(1, i)
			Number = Number:sub(i+1, Number:len())
			break
		end
	end


	for i = 1, Number:len() do
		if i > 3 then
			NewString = `{NewString or ""}{Number:sub(1, 3)},`

			Number = Number:sub(i, Number:len())
			i = 1
		end
	end

	Number = `{Decimals or ""}{NewString or ""}{Number or ""}`
	Number = Number:reverse()

	return Number
end

print(AddCommas("437567678923896"))
  21:59:57.744  ,,,,,,,,,437,767,923,896  -  Edit
1 Like
local function AddCommas(Number:string)
	Number = tostring(Number)
	if Number:len() <= 3 then return Number end

	Number = Number:reverse()

	local Decimals:string
	local NewString:string

	--print(Number)

	for i = 1, Number:len() do
		local character = Number:sub(i, i)
		if character == "." then
			Decimals = Number:sub(1, i)
			Number = Number:sub(i+1, Number:len())
			break
		end
	end

	--print(Decimals)


	for i = 1, Number:len() do
		if i > 3 then
			if Number:len() <= 3 then
				break
			end

			NewString = `{NewString or ""}{Number:sub(1, 3)},`
			print(NewString)

			Number = Number:sub(i, Number:len())
			print(Number)
			i = 1
		end
	end

	Number = `{Decimals or ""}{NewString or ""}{Number or ""}`
	Number = Number:reverse()

	return Number
end

thanks!

print(AddCommas("4373478568437678468458678345969345396"))
  22:12:25.325  ,373,843,468,678,596,345,396  -  Edit

right when i add one more digit this happens

the humble table.concat:

the humble scooter user:

2 Likes
local function AddCommas(Number:string)
	Number = tostring(Number)
	if Number:len() <= 3 then return Number end

	Number = Number:reverse()

	local Decimals:string
	local NewString:string

	for i = 1, Number:len() do
		local character = Number:sub(i, i)
		if character == "." then
			Decimals = Number:sub(1, i)
			Number = Number:sub(i+1, Number:len())
			break
		end
	end

	for i = 1, Number:len() do
		if i > 3 then
			if Number:len() <= 3 then
				break
			end

			if Number:sub(i, Number:len()):len() == 0 then
				NewString = `{NewString or ""}{Number:sub(1, 3)}`
			else
				NewString = `{NewString or ""}{Number:sub(1, 3)},`
			end
			Number = Number:sub(i, Number:len())
			i = 1
		end
	end

	Number = `{Decimals or ""}{NewString or ""}{Number or ""}`
	Number = Number:reverse()

	return Number
end

pain
also why do replies need 30+ letters to send

limit

print(AddCommas("4373478568437678468458674685486575687856979488345969345396"))
  22:27:31.982  347,678,674,657,856,488,596,345,396  -  Edit

i mean do you need that big of a number?

also i noticed numbers dissapearing, no idea how this happened HELP!

i am a very rich man
i need big numbers to tell how much money i have (usd)

ok i just need a moment fr am working on IT!!

local function AddCommas(Number:string)
	Number = tostring(Number)
	if Number:len() <= 3 then return Number end

	Number = Number:reverse()

	local Decimals:string
	local NewString:string

	for i = 1, Number:len() do
		local character = Number:sub(i, i)
		if character == "." then
			Decimals = Number:sub(1, i)
			Number = Number:sub(i+1, Number:len())
			break
		end
	end
	
	local Key = 0
	while Number:len() > 0 do
		Key += 1
		
		if Key > 3 then
			if Number:sub(Key, Number:len()):len() == 0 then
				NewString = `{NewString or ""}{Number:sub(1, 3)}`
			else
				NewString = `{NewString or ""}{Number:sub(1, 3)},`
			end
			Number = Number:sub(Key, Number:len())
			Key = 1
		end
	end

	Number = `{Decimals or ""}{NewString or ""}{Number or ""}`
	Number = Number:reverse()

	return Number
end

i THINK big numbers work now… idk

yay

print("I own " .. AddCommas("43857943734785684376784684586746854865756878569794883459698374684785768934768945555847878784768945694676897569458967839306589637487568943695468946957398576893478678437856942962768345396.76876869837485783497684596937689376935769356789".. " usd"))
  22:44:53.484  I own 43,857,943,734,785,684,376,784,684,586,746,854,865,756,878,569,794,883,459,698,374,684,785,768,934,768,945,555,847,878,784,768,945,694,676,897,569,458,967,839,306,589,637,487,568,943,695,468,946,957,398,576,893,478,678,437,856,942,962,768,345,396.76876869837485783497684596937689376935769356789 usd  -  Edit
1 Like

a very rich man

can i have some for rent

if you live to 734578342562784567826782347689268989567568586853 years old then yes

ill wait

or you can just use this like everyone else does

function comma_value(amount)
  local formatted = amount
  while true do  
    formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
    if (k==0) then
      break
    end
  end
  return formatted
end
2 Likes

string.gsub, yup was about to comment

1 Like

Real ones preallocate space and iterate O(n) into a table.

1 Like