4

我有一个监控 CPU 和 GPU 温度的外部应用程序......

我使用 Lua 和外星人扩展来获取这些值(通过GetWindowText)并对这些值进行一些模式匹配,有效地从字符串中提取温度数字,默认情况下显示为CPU 67.875 °C......
但也许我对 LUA 中的模式如何工作有错误的想法(因为它们看起来并不完全像正则表达式)?

我使用的模式[%d]+[.%d+]*应该匹配 0 到 100.0 之间的任何数字,对吗?然而奇怪的是,当值达到 56.5 度左右时
,我得到了令人难以置信的奇怪输出(见链接)

为什么会这样?
以及如何以 0 到 100 的格式提取正确的浮点值(作为字符串)XYY.ZZZ,其中X不是可选的,Y是可选的,并且.是可选的,除非Z存在?

4

1 回答 1

5

您会看到累积舍入误差的影响,因为 0.16 不能用浮点数精确表示。下面的代码表现更好:

local n = 0
while n < 10000 do
    local s = tostring(n/100)
    local t = s:match("[%d]+[.%d+]*")
    print(t)
    n = n + 16
end

现在,对于您的问题,请尝试以下更简单的模式:

s="CPU 67.875 °C"
print(s:match("CPU +(.-) +"))
于 2013-05-16T12:14:25.967 回答