我正在尝试使用简单代码从用户获取十进制值:
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)。
如何获取用户输入的浮点数或小数值?谢谢你的帮助。
答案 0 :(得分:1)
代码的问题在于"%d+"
中的模式btn:action
仅获得第一次数字运行。
您可以更改模式以处理小数点,但很难编写适用于所有情况的模式,包括可选的符号和小数点以及科学格式。
最好让tonumber
完成其工作:如果字符串无法转换为数字,它将返回nil
。
答案 1 :(得分:1)
另一个选择是使用IupText的MASK属性让用户只能输入数字。