0

如何将以下文本框与以下逻辑一起添加?

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;
}
4

1 回答 1

1

处理函数中 e.parameter.oneTextBox 返回的值是一个字符串,在您的示例中它应该是“$120.00”,而您想要的是一个数值......我建议使用 areplace()来删除所有非数字字符并将其转换为如下数字:

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,所以不要忘记将结果除以某处,否则您的东西会变得非常昂贵!;-) 另外我有时会遇到一些舍入错误,但总是可以很容易地处理,例如在类似的情况下,我不得不使用类似的东西来获得正确的结果:(如果 quant = 2 in,则为 2.00 而不是 1.99下面的例子,注意我把整数除以 100 得到 2 位小数的值)

 var total = parseInt(Number(quant)*valtotal*100+0.01)/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
  }

在此处输入图像描述

编辑 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
}
于 2012-12-09T23:03:23.710 回答