2012-12-09 2 views
0

다음 텍스트 상자를 로직과 함께 아래에 추가하려면 어떻게합니까?Google 애플리케이션 스크립트에 텍스트 상자를 추가하고 곱하는 방법은 무엇입니까?

oneTextBox = $120.00, 
twoTextBox = .03*oneTextBox, 
threeTextBox = oneTextBox + twoTextBox 

각 텍스트 상자의 단위를 달러 ($)로 표시하고 싶습니다.


function doGet(e) { 
    var app = UiApp.createApplication(); 

    var VertPanel = app.createVerticalPanel().setId('VertPanel'); 

    var oneTextBox = app.createTextBox().setText("$120.00").setId("oneTextBox").setName("oneTextBox"); 
    var twoTextBox = app.createTextBox().setId("twoTextBox").setName("twoTextBox"); 
    var threeTextBox = app.createTextBox().setId("threeTextBox").setName("threeTextBox"); 

    app.add(VertPanel); 
    VertPanel.add(oneTextBox).add(twoTextBox).add(threeTextBox); 

    return app; 
} 

답변

1

핸들러 함수에 e.parameter.oneTextBox에 의해 반환되는 값은 "$ 120.00"문자열, 귀하의 예제에서 그것이 있어야하고 당신이 원하는 것은 ... 숫자 값입니다 내가 '제안이 같은 숫자로 그 모든 숫자가 아닌 문자를 제거하기 위해 replace()를 사용하여 변환하는 것입니다 D :

var oneTextBoxNumValue = Number(e.parameter.oneTextBox.replace(/[^0-9]/g,''));// the regex ^0-9 takes everything not between 0 and 9 (and replace by '') 

당신이 변환 후 수학 연산으로 원하는 모든 것을 할 수있는 다른 텍스트 상자에 동일한 프로세스를 사용하여.

가 $의 결과를 얻으려면, 단순히

getElementById('oneTextBox').setText(resultNumeric+"$") 

유일한 까다로운 일이 소수점, 당신은 전환에서이 점을 고려해야합니다 당신의 결과에 '$'를 추가 $120.00,를 숫자 값이 12000이 될 것이므로 결과를 어딘가에 나누는 것을 잊지 않으면 물건이 매우 비싸게됩니다! ;-) 또한 때로는 반올림 오류가 있었지만 항상 쉽게 처리 할 수 ​​있습니다. 예를 들어 이와 비슷한 경우에 올바른 결과를 얻으려면 다음과 같이 사용해야합니다. (1.00 대신 2.00, quant = 아래의 예 2, 나는 그것을 시작하는 몇 가지 아이디어를 줄 것이다 희망)

var total = parseInt(Number(quant)*valtotal*100+0.01)/100; 

2 진수로 값을 얻기 위해 100 정수를 나누고 있습니다. 편집

:

function calcTest() { 
    var app = UiApp.createApplication().setTitle('TextField Calculator'); 
    var button = app.createButton('Calculate'); 
    var handler = app.createServerHandler('calc'); 
    button.addClickHandler(handler); 
    var grid = app.createGrid(5, 2); 
    grid.setText(0, 0, 'value1 '); 
    grid.setWidget(0, 1, app.createTextBox().setName('value1').setText('$ 45.00/unit')); 
    grid.setText(1, 0, 'value2'); 
    grid.setWidget(1, 1, app.createTextBox().setName('value2').setText('3 units')); 
    grid.setText(2, 0, 'press button to calculate'); 
    grid.setWidget(2, 1, button); 
    grid.setText(3, 0, 'value3 = value1*1.35'); 
    grid.setWidget(3, 1, app.createTextBox().setId('value3').setEnabled(false)); 
    grid.setText(4, 0,'sum value1 + value2 + value3'); 
    grid.setWidget(4, 1, app.createTextBox().setId('sum').setEnabled(false)); 
    handler.addCallbackElement(grid); 
    app.add(grid); 
    var ss = SpreadsheetApp.getActive(); 
    ss.show(app); 
    } 

function calc(e){ 
    var app = UiApp.getActiveApplication(); 
    var value1 = Number(e.parameter.value1.replace(/[^0-9]/g,''))/100; 
    var value2 = Number(e.parameter.value2.replace(/[^0-9]/g,'')); 
    var calcvalue = parseInt(value1*1.35*100)/100 
    var sumcalc = calcvalue+value1+value2 
    app.getElementById('value3').setText('$ '+calcvalue) 
    app.getElementById('sum').setText(sumcalc+' without unit;)') 
    return app 
    } 

enter image description here

편집 2 : 여기 다른 코드는, 내가 문자열 값을 변환하는 응용 프로그램에서 사용하는 기능 여기는 설명하기 위해 작은 코드 유로로, 그것은 그것의 접근법에서 약간 다르지만 꽤 잘 작동합니다.

function toEuro(val){ 
    if(val==''){temp='';return temp} 
    var temp = val.toString().replace(/[^\d\.-]/g,'').split('.'); 
    if(temp[0]==''){temp[0]='0'} 
    if(temp.length==1){var result = temp[0]+',00 €'} 
    else{ 
    var int = temp[0] 
    var dec = temp[1] 
     if(dec.length==1){var result=int+','+dec+'0 €'}else{var result=int+','+dec+' €'} 
    } 
    return result 
} 
+0

Hey Serge. 책을 쓸거야? 너는 먼 길을왔다! – ScampMichael

+0

하하 ... 고마워 마이클, 가끔은 너무 열정적 인 게 사실이야! 하지만 솔직히 말해서 나는 내가하는 것만 큼 많이 받아 들인다. 대답은 매우 효율적인 학습 방법이다.) –

+0

이것은 완벽하다. .. again ... thx again Serge. 내가 프로그래밍을 시작한 이후로 진지하게 가르쳤다. 나는 너에게 충분히 감사 할 수 없다. 추가 질문이 하나 있습니다. 2000.1251231과 같은 숫자를 얻으려면 텍스트 상자에 소수 자릿수 두 자리 만 만들려면 어떻게합니까? 오 ... 제 3 자릿수가 4 이하인 경우 소수점 이하 자릿수가 5 이상이고 반올림하지 않으면 반올림하고 싶습니다. – user1833055

관련 문제