2017-10-25 6 views
1

IUP 텍스트 항목에서 루아에서 부동 번호를받는 방법 : 그러나내가 사용자의 진수 값 얻기 위해 다음과 같은 간단한 코드를 시도하고

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

을, 심지어는 decimal- 전에 만 정수 (일부를 출력 25.9999는 25로 인쇄 됨).

사용자가 float 또는 decimal 값을 입력하려면 어떻게해야합니까? 당신의 도움을 주셔서 감사합니다.

답변

1

코드의 문제점은 의 패턴 "%d+"이 첫 번째 숫자 만 가져 오는 것입니다.

소수점을 처리하도록 패턴을 변경할 수 있지만 선택적 사인, 소수점 및 과학 형식을 포함하여 모든 경우에 적용되는 패턴을 작성하기는 어렵습니다.

tonumber의 작업을 수행하는 것이 가장 좋습니다. 문자열을 숫자로 변환 할 수없는 경우 nil을 반환합니다.

+0

그게 완벽합니다 - 가장 쉽고 정확합니다! 'tonumber (t1.value)'가 작동합니다. – rnso

1

또 다른 옵션은 IupText의 MASK 특성을 사용하여 사용자가 숫자를 입력 할 수있게하는 것입니다.