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」である必要があり、必要なのは数値です...replace()すべてを削除するために a を使用することをお勧めします数字以外の文字を次のような数字に変換します。

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

他の textBoxes で同じプロセスを使用すると、この変換後に数学演算で必要なことをすべて行うことができます。

結果を $ で取得するには、結果に「$」を追加するだけです

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

唯一のトリッキーな点は小数点です。変換でこれを考慮する必要があります。$120.00,数値では 12000 になるため、結果をどこかで除算することを忘れないでください。そうしないと、非常に高価になります。;-) また、丸めエラーが時々発生しましたが、非常に簡単に処理することが常に可能です。たとえば、同様のケースで、正しい結果を得るためにこのようなものを使用する必要がありました:以下の例では、整数を 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
  }

ここに画像の説明を入力

EDIT 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 に答える