我有一个监控CPU和GPU温度的外部应用程序......
我使用Lua和alien extension来获取这些值(通过GetWindowText)并对这些值进行一些模式匹配,有效地从字符串中提取温度数字,默认显示像CPU 67.875 °C
......这样的东西
但也许我对LUA中的模式如何工作有错误的想法(因为它们看起来不像正则表达式)?
我使用的模式是[%d]+[.%d+]*
,它应匹配0到100.0之间的任何数字,对吗?
但奇怪的是,当值达到56.5度左右时,我getting incredibly strange output (见链接)。
为什么会发生这种情况?
如何以XYY.ZZZ
的格式提取0到100之间的正确浮点值(作为字符串),其中X
不是可选的,Y
是可选的,.
是可选的1}}是可选的,除非Z
存在?
答案 0 :(得分: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 +(.-) +"))