如何匹配浮点数(如1.234
)或在处理字符串时使用“E符号”(如1.23e04
)?如何在读取字符串时匹配浮点数
举个例子,让我们说,我想从一个数据文件类似下面的阅读数:
0.0 1.295e-03
0.1 1.276e-03
0.2 1.261e-03
0.3 1.247e-03
0.4 1.232e-03
0.5 1.218e-03
在我写我自己的功能,每一行转换成它包含数字的那一刻,但它不是非常优雅,根本不可移植:具有不同“布局”的数据文件会产生错误。
下面是一个简单的例子,它读取数据文件已经提交并打印到屏幕的数字:
function read_line(str)
local a, b, c, d, e = str:match(
"^%s*(%d+)%.(%d+)%s+(%d+)%.(%d+)[Ee]%-*(%d+)")
if str:match("%-") then
e = -tonumber(e)
end
local v1 = a + .1*b
local v2 = (c + .001*d) * 10^e
return v1, v2
end
for line in io.lines("data.txt") do
print(read_line(line))
end
,这给结果:
0 0.001295
0.1 0.001276
0.2 0.001261
0.3 0.001247
0.4 0.0
0.5 0.001218
这的确是结果我想要实现,但是是否有更加优雅和通用的方式来处理这个问题?
注:数据文件可以有一个数字超过两列,可以有两种的浮点表示和“E符号”。
tonumber解析彩车本身:'在string.gmatch字(“0.0 1.295e-03 “,”[^%s] +“)打印(tonumber(word))end' – user2053898 2015-04-05 17:33:46