Going past roblox's intvalue limit

Hey, I’m Looking for a way to format money i have a script but i can’t seem to make it go over the max roblox default value any way to go over the value?

Can’t seem to make it go past roblox’s default max value set on leaderboards / intvalues

I’ve tried every code and they’re was one which sounded promissing but couldn’t understand how to implement it to my script heres my script

Code:

game.Players.PlayerAdded:Connect(function(player)
	local folder = Instance.new("Folder")
	folder.Name = player.Name
	folder.Parent = player
	
	local currency1 = Instance.new("IntValue")
	currency1.Name = "Money"
	currency1.Value = 50000000000000000000
	currency1.Parent = folder
	
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	
	local fake1 = Instance.new("StringValue", leaderstats)
	fake1.Value = tostring(currency1.Value)
	
	while wait(0) do
		--local x = tostring(currency1.Value)
		
		--- If Someone goes past these values then holy macaroni!
		
		local y = currency1.Value
		local x = tostring(y)
		
		
		
		if #x >= 49 then 
			fake1.Value = x:sub(0, (#x-48)) .. "." .. (x:sub(#x-45, (#x-45))) .. "QnD+"
		elseif #x >= 46 then
			fake1.Value = x:sub(0, (#x-45)) .. "." .. (x:sub(#x-42, (#x-42))) .. "qdD+"
		elseif #x >= 43 then
			fake1.Value = x:sub(0, (#x-42)) .. "." .. (x:sub(#x-39, (#x-39))) .. "tdD+"
		elseif #x >= 40 then
			fake1.Value = x:sub(0, (#x-39)) .. "." .. (x:sub(#x-36, (#x-36))) .. "DD+"
		elseif #x >= 37 then
			fake1.Value = x:sub(0, (#x-36)) .. "." .. (x:sub(#x-33, (#x-33))) .. "Ud+"
		elseif #x >= 34 then
			fake1.Value = x:sub(0, (#x-33)) .. "." .. (x:sub(#x-30, (#x-30))) .. "de+"
		elseif #x >= 31 then
			fake1.Value = x:sub(0, (#x-30)) .. "." .. (x:sub(#x-27, (#x-27))) .. "N+"
		elseif #x >= 28 then
			fake1.Value = x:sub(0, (#x-27)) .. "." .. (x:sub(#x-24, (#x-24))) .. "O+"
		elseif #x >= 25 then
			fake1.Value = x:sub(0, (#x-24)) .. "." .. (x:sub(#x-21, (#x-21))) .. "Sp+"
		elseif #x >= 22 then
			fake1.Value = x:sub(0, (#x-21)) .. "." .. (x:sub(#x-18, (#x-18))) .. "sx+"
		elseif #x >= 19 then
			fake1.Value = x:sub(0, (#x-18)) .. "." .. (x:sub(#x-15, (#x-15))) .. "Qn+"
		elseif #x >= 16 then
			fake1.Value = x:sub(0, (#x-15)) .. "." .. (x:sub(#x-12, (#x-12))) .. "qd+"
		elseif #x >= 13 then
			fake1.Value = x:sub(0, (#x-12)) .. "." .. (x:sub(#x-9, (#x-9))) .. "T+"
		elseif #x >= 10 then
			fake1.Value = x:sub(0, (#x-9)) .. "." .. (x:sub(#x-7, (#x-7))) .. "B+"
		elseif #x >= 7 then
			fake1.Value = x:sub(0, (#x-6)) .. "." .. (x:sub(#x-5, (#x-5))) .. "M+"
		elseif #x >= 4 then
			fake1.Value = x:sub(0, (#x-3)) .. "." .. (x:sub(#x-2, (#x-2))) .. "K+"
		else -- Yur Broke Boi
			fake1.Value = tostring(currency1.Value)
		end
	end
end)

This may help: [2.0.1] BigInteger, safely store and represent values over 2⁵³

Otherwise for your own approach, maybe you could convert to and from a string form? You’re effectively using a string value anyways to represent the value and I think you’re able to read large numbers in code even if you can’t use it as a IntValue value.

I’ll try Using BigInteger Thanks!

I found a way which works it uses berezaa miners haven MoneyLib Module thanks for the reply / Replys though!