local Onumber = io.read() -- used for checks !!! DO NOT CHANGE THIS !!!
local number = Onumber
local SubE
local PostE
if not Onumber or Onumber:match("^%s*$") then
print("No input provided")
os.exit(0)
end
-- Stage 1 (1e303 Limit)
function round()
number = tonumber(number)
number = (math.floor(number * 100) / 100)
end
function abv()
local AmntE = 0
number = tonumber(number)
if number > 1e303 then
print("Greater than 1e300")
os.exit(0)
end
while true do
number = number / 10
AmntE = AmntE + 1
if number < 10 then
break
end
end
round()
ConvertedNum = tostring(number .. "e" .. AmntE)
print(ConvertedNum)
end
-- Stage 2 (Beyond 1e303 to infinity)
local Onumber2 = io.read()
local Numbers = {
[1] = {var = Onumber, SubE = "", PostE = ""},
[2] = {var = Onumber2, SubE = "", PostE = ""},
}
function CheckE()
for _,v in pairs(Numbers) do
e = string.find(v.var, 'e')
e = e - 1
end
end
function findE()
CheckE()
if e > 1 then
print("Only 1 'e' can be used")
return
end
for _,v in pairs(Numbers) do
v.SubE = tonumber(string.sub(v.var, 1, string.find(v.var, 'e') - 1))
v.PostE = tonumber(string.sub(v.var, string.find(v.var, 'e') + 1))
end
end
function SolveForE()
if SubE2 >= 10 then
while true do
SubE2 = SubE2 / 10
PostE2 = PostE2 + 1
if SubE2 < 10 then
break
end
end
end
end
-- Stage 3 (Addition)
function Addition()
findE()
SubE2 = tonumber(Numbers[1].SubE) + tonumber(Numbers[2].SubE)
if Numbers[1].PostE > Numbers[2].PostE then
PostE2 = Numbers[1].PostE
elseif Numbers[1].PostE < Numbers[2].PostE then
PostE2 = Numbers[2].PostE
else
PostE2 = Numbers[1].PostE
end
SolveForE()
print(SubE2 .. "e" .. PostE2 .. ": Addition")
end
-- Stage 4 (Subtraction)
function Subtraction() -- REDO THIS AS SOON AS POSSIBLE
findE()
SubE2 = tonumber(Numbers[1].SubE) - tonumber(Numbers[2].SubE)
if Numbers[1].PostE < Numbers[2].PostE then
PostE2 = Numbers[1].PostE
elseif Numbers[1].PostE > Numbers[2].PostE then
PostE2 = Numbers[2].PostE
else
PostE2 = Numbers[1].PostE
end
SolveForE()
print(SubE2 .. "e" .. PostE2 .. ": Subtraction")
end
-- Stage 5 (Multiplication)
function Multiplication()
findE()
SubE2 = tonumber(Numbers[1].SubE) * tonumber(Numbers[2].SubE)
PostE2 = tonumber(Numbers[1].PostE) + tonumber(Numbers[2].PostE)
SolveForE()
print(SubE2 .. "e" .. PostE2 .. ": Multiplication")
end
-- Stage 6 (Division)
function Division()
findE()
SubE2 = tonumber(Numbers[1].SubE) / tonumber(Numbers[2].SubE)
PostE2 = tonumber(Numbers[1].PostE) - tonumber(Numbers[2].PostE)
SolveForE()
SubE2 = (math.floor(100*(SubE2))/100)
print(SubE2 .. "e" .. PostE2 .. ": Division")
end
-- Stage 7 (Power) [ this took WAY to long to figure out ]
function ToPower()
findE()
StringSub = tostring(Numbers[1].SubE)
StringSub = tonumber(StringSub:sub(1, 1))
SubE2 = StringSub ^ tonumber(Numbers[2].SubE)
PostE2 = tonumber(Numbers[1].SubE * 10 ^ Numbers[1].PostE) + tonumber(Numbers[2].SubE * 10 ^ Numbers[2].PostE)
SolveForE()
print(SubE2 .. "e" .. PostE2 .. ": Power")
end
-- !!! KEEP AT BOTTOM !!!
function ValuePrint()
print(Numbers[1].SubE .. "e" .. Numbers[1].PostE .. ": Number 1")
print(Numbers[2].SubE .. "e" .. Numbers[2].PostE .. ": Number 2")
Addition() Subtraction() Multiplication() Division() ToPower()
end
if not string.find(number, 'e') then
abv()
else
findE()
ValuePrint()
end
To embed this project on your website, copy the following code and paste it into your website's HTML: