处理函数中 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
}