У меня есть внешнее приложение, которое отслеживает процессор и GPU температуру ...
Почему сопоставление строк строки lua делает это?
Я использую Lua с alien extension, чтобы захватить эти значения (через GetWindowText) и сделать некоторый шаблон этих значений, эффективно извлекать температуру цифры из строки, которая по умолчанию отображается как-то вроде CPU 67.875 °C
...
Но, возможно, у меня есть неправильная идея о том, как шаблоны работают в LUA (поскольку они не похожи на регулярные выражения)?
Образец, который я использую, - [%d]+[.%d+]*
, который должен соответствовать любому числу от 0 до 100,0, правильно?
Как ни странно, я getting incredibly strange output, когда значения достигают около 56,5 градусов (см. Ссылку).
Почему это происходит?
И как я могу извлечь правильные значения с плавающей точкой (в виде строки) в диапазоне от 0 до 100 в формате XYY.ZZZ
, где X
не обязательно, Y
не является обязательным, и .
не является обязательным, если Z
не существует?
Ладно, я понял, что это просто математическое состояние гонки сортов ... Но это еще не объясняет _why_ он решает сойти с ума на полпути и продолжает дальше до бесконечности. – RectangleEquals
@RectangleEquals, см. [Руководство по плавающей точке - что каждый программист должен знать о арифметике с плавающей точкой] (http://floating-point-gui.de/). – lhf
@RectangleEquals: Обратите внимание, что, хотя ваш шаблон не имеет к этому никакого отношения (вы можете просто распечатать 's' и увидеть то же самое), ваш шаблон также неверен. Вам нужно избегать '.' и проверять только на * один из них во втором предложении:' [% d] +%.? [% D] * '. В противном случае вы можете разбирать «10aaaaa4bdcedd5» так же легко, как «10.45». –