如何处理浮点数(如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.001232 0.5 0.001218
这确实是我想要实现的结果,但是有更优雅和一般的方法来处理这个问题吗?
注意:数据文件可以包含两列以上的数字,并且可以同时具有浮点表示和“E表示法”.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。