如何从 IUP 文本输入中获取 Lua 中的浮点数

How to get float number in Lua from IUP text entry

我正在尝试按照简单的代码从用户那里获取十进制值:

require( "iuplua" )

t1 = iup.text{expand = "YES", padding = "10x10", alignment="ARIGHT", size="40x"}
btn = iup.button {title = "Print:", padding = "10x10", alignment="ACENTER", size="40x"}
qbtn = iup.button{title="Quit", expand = "YES", padding = "10x10", alignment="ACENTER", size="40x"}

function btn:action()
    strval1 = string.match (t1.value, "%d+")
    print (strval1)
    num = tonumber(strval1)
    print (num)
    end

function qbtn:action()
    os.exit()
    end

dlg = iup.dialog {
 iup.vbox{
    iup.hbox{
        iup.label{title="Decimal:", padding = "10x10", alignment="ALEFT", size="40x"},
        t1  },
    iup.hbox{
        btn,
        qbtn }}}

dlg:show()
iup.MainLoop() 

但是,它只打印出一个整数(小数点前的部分 - 即使是 25.9999 也打印为 25)。

如何获取用户输入的浮点数或小数值?谢谢你的帮助。

代码的问题在于 btn:action 中的模式 "%d+" 仅获取前 运行 个数字。

您可以更改模式来处理小数点,但很难编写适用于所有情况的模式,包括可选的符号和小数点以及科学格式。

最好让 tonumber 完成它的工作:如果字符串无法转换为数字,它将 return nil

另一种选择是使用 IupText 的 MASK 属性让用户只能输入数字。