1

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

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)。

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

4

2 回答 2

1

代码的问题在于,模式"%d+"btn:action得到第一次运行的数字。

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

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

于 2017-10-25T10:39:33.807 回答
1

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

于 2017-10-25T17:57:42.973 回答