如何将以下文本框与下面的逻辑一起添加?
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;
}
答案 0 :(得分:1)
e.parameter.oneTextBox在处理函数中返回的值是一个字符串,在你的例子里它应该是“$ 120.00”,你想要的是一个数值......我建议使用一个replace()
删除所有非数字字符并将其转换为如下数字:
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的数值,所以不要忘记将结果划分到某个地方或者你的东西会变得非常昂贵! ;-)
此外我有时会遇到一些舍入错误,但总是可以很容易地处理,例如在类似的情况下我必须使用类似的东西才能得到正确的结果:(2.00而不是1.99,如果quant = 2 in下面的例子,请注意我将整数除以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
}