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

我正在尝试以下简单代码从用户处获取十进制数值:

require( "iuplua" )

t1 = iup.text{expand = "YES", padding = "10x10", alignment="ARIGHT", size="40x"}
btn = iup.button {title = "打印:", padding = "10x10", alignment="ACENTER", size="40x"}
qbtn = iup.button{title="退出", 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="十进制数:", padding = "10x10", alignment="ALEFT", size="40x"},
        t1  },
    iup.hbox{
        btn,
        qbtn }}}

dlg:show()
iup.MainLoop()

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

如何获取用户输入的浮点数或十进制数值?谢谢您的帮助。

点赞
用户107090
用户107090

问题是代码中的模式"%d+"只会获取btn:action中的第一次数字匹配。

你可以改变模式来处理小数点,但是很难编写一个能适用于所有情况(包括可选符号、小数点和科学计数法)的模式。

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

2017-10-25 10:39:33
用户1898478
用户1898478

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

2017-10-25 17:57:42