Lua实战之以非科学记数法输出小数
Description
现有小数 n,我们知道,当 n < 0.0001 时会以科学记数法输出,例如:
local n = 0.0000999
print(n) -- 9.99e-005
由于不少人对科学记数法并不熟悉,所以还是希望以非科学记数法输出,如何实现?
Implemention
function printDecimal(n)
if type(n) ~= "number" then
return tostring(n)
end
if n >= 0.0001 then
return tostring(n)
end
local rStr, sPos = string.reverse(string.format("%.16f", n)), 0
for s in string.gmatch(rStr, ".") do
sPos = sPos + 1
if tonumber(s) > 0 then
break
end
end
local fStr = string.reverse(string.sub(rStr, sPos))
return fStr
end
print(0.0001) -- 0.0001
print(0.00001) -- 1e-005
print(0.0000999) -- 9.99e-005
print(0.000000123456) -- 1.23456e-007
print(printDecimal(0.0001)) -- 0.0001
print(printDecimal(0.00001)) -- 0.00001
print(printDecimal(0.0000999)) -- 0.0000999
print(printDecimal(0.000000123456)) -- 0.000000123456