Lua - gmatch科学符号字符串到数字



我正在尝试将一串科学记数法数字转换为实际数字。

我的测试字符串的格式如下:

myString = 1.000000000000000E+00,  2.000000000000000E+02,  -1.000000000000000E+05

我的当前代码:

elements = {}
for s in myString:gmatch('%d+%.?%d*') do
    table.insert(elements, s);
end
return unpack(elements);

Elements错误地返回以下内容:

1.000000000000000     %from the first number before "E"
00                    %after the "E" in the first number
2.000000000000000     %from the second number before "E"

有谁知道我该怎么去修复这个吗?

对我来说,"实际数字"意味着数字数据类型。tonumber()在科学记数法上做得很好。

local myString = [[ 1.000000000000000E+00, 
 2.000000000000000E+02,  -1.000000000000000E+05 ]]
local function convert(csv)
    local list = {}
    for value in (csv .. ","):gmatch("(%S+)%W*,") do table.insert(list,tonumber(value)) end
    return unpack(list)
end
print(convert(myString))

试试这个:

for s in (myString..","):gmatch("(%S+),") do print(s) end

我建议使用这里定义的gsplit函数:SplitJoin,然后像这样有一个循环:

t = {}
for number in gsplit(myString:gsub('%s',''),',') do
    t[#t+1] = tonumber(number)
end

对于字符串:

myString = [[1.000000000000000E+00,  2.000000000000000E+02,  -1.000000000000000E+05]]

table.concat(t,',')的结果为:

1,200,-100000

这是另一个答案,这个答案很健壮,但可能有些矫枉过正:

f = loadstring("return {" .. myString .."}")
if f==nil then  end -- myString malformed
elements = f()

扩展模式以识别可选的尾号并使用tonumber从字符串中获取数字:

elements = {}
myString = "1.000000000000000E+00,  2.000000000000000E+02,  -1.000000000000000E+05"
for s in myString:gmatch('[+%-]?%d+%.?%d*[eE+%-]*%d?%d?') do
    table.insert(elements, tonumber(s))
end
print(unpack(elements))

相关内容

  • 没有找到相关文章

最新更新