2013-08-22 88 views
0

我有一个活动将价格与订单数量相加,并且还可以选择在其上添加增值税。价格很好,总是增加到2位小数。但是,当添加增值税(英国为20%)时,它最终会超过2位小数。我见过其他的建议,并没有能够得到它的工作。任何帮助将不胜感激。我的代码如下帮助计算和四舍五入到小数点后两位

 editText1 = (EditText) findViewById(R.id.editText1); 
    editText2 = (EditText) findViewById(R.id.editText2); 
    editText3 = (EditText) findViewById(R.id.editText3); 
    editText4 = (EditText) findViewById(R.id.editText4); 
    editText5 = (EditText) findViewById(R.id.editText5); 
    editText6 = (EditText) findViewById(R.id.editText6); 
    editText7 = (EditText) findViewById(R.id.editText7); 
    editText8 = (EditText) findViewById(R.id.editText8); 
    editText9 = (EditText) findViewById(R.id.editText9); 
    editText10 = (EditText) findViewById(R.id.editText10); 
    editText11 = (EditText) findViewById(R.id.editText11); 
    editText12 = (EditText) findViewById(R.id.editText12); 
    editText13 = (EditText) findViewById(R.id.editText13); 
    editText14 = (EditText) findViewById(R.id.editText14); 
    editText15 = (EditText) findViewById(R.id.editText15); 
    editText16 = (EditText) findViewById(R.id.editText16); 
    editText17 = (EditText) findViewById(R.id.editText17); 
    editText18 = (EditText) findViewById(R.id.editText18); 
    editText19 = (EditText) findViewById(R.id.editText19); 
    button1 = (Button) findViewById(R.id.button1); 
    button2 = (Button) findViewById(R.id.button2); 

    button1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (editText19.getText() != null || editText18.getText() != null || editText17.getText() != null || editText16.getText() != null || editText15.getText() != null || editText14.getText() != null || editText13.getText() != null || editText12.getText() != null || editText11.getText() != null || editText10.getText() != null || editText9.getText() != null || editText8.getText() != null || editText7.getText() != null || editText6.getText() != null || editText5.getText() != null || editText4.getText() != null || editText3.getText() != null) 
       editText2.setText((String.valueOf(11.67 * (Double.parseDouble(editText16.getText().toString())) + ((15.83 * (Double.parseDouble(editText17.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((24.17 * (Double.parseDouble(editText19.getText().toString())) + ((22.36 * (Double.parseDouble(editText15.getText().toString())) + ((4.17 * (Double.parseDouble(editText14.getText().toString())) + ((26.66 * (Double.parseDouble(editText13.getText().toString())) + ((4.17 * (Double.parseDouble(editText12.getText().toString())) + ((30.96 * (Double.parseDouble(editText11.getText().toString())) + ((4.17 * (Double.parseDouble(editText10.getText().toString())) + ((35.26 * (Double.parseDouble(editText9.getText().toString())) + ((4.17 * (Double.parseDouble(editText8.getText().toString())) + ((39.56 * (Double.parseDouble(editText7.getText().toString())) + ((4.17 * (Double.parseDouble(editText6.getText().toString())) + ((9.17 * (Double.parseDouble(editText5.getText().toString())) + ((13.33 * (Double.parseDouble(editText4.getText().toString())) + ((17.20 * (Double.parseDouble(editText3.getText().toString()))))))))))))))))))))))))))))))))))))))); 


    ;};;}); 

    button2.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (editText19.getText() != null || editText18.getText() != null || editText17.getText() != null || editText16.getText() != null || editText15.getText() != null || editText14.getText() != null || editText13.getText() != null || editText12.getText() != null || editText11.getText() != null || editText10.getText() != null || editText9.getText() != null || editText8.getText() != null || editText7.getText() != null || editText6.getText() != null || editText5.getText() != null || editText4.getText() != null || editText3.getText() != null) 
       editText1.setText((String.valueOf(1.2 * ((11.67 * (Double.parseDouble(editText16.getText().toString())) + ((15.83 * (Double.parseDouble(editText17.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((24.17 * (Double.parseDouble(editText19.getText().toString())) + ((22.36 * (Double.parseDouble(editText15.getText().toString())) + ((4.17 * (Double.parseDouble(editText14.getText().toString())) + ((26.66 * (Double.parseDouble(editText13.getText().toString())) + ((4.17 * (Double.parseDouble(editText12.getText().toString())) + ((30.96 * (Double.parseDouble(editText11.getText().toString())) + ((4.17 * (Double.parseDouble(editText10.getText().toString())) + ((35.26 * (Double.parseDouble(editText9.getText().toString())) + ((4.17 * (Double.parseDouble(editText8.getText().toString())) + ((39.56 * (Double.parseDouble(editText7.getText().toString())) + ((4.17 * (Double.parseDouble(editText6.getText().toString())) + ((9.17 * (Double.parseDouble(editText5.getText().toString())) + ((13.33 * (Double.parseDouble(editText4.getText().toString())) + ((17.20 * (Double.parseDouble(editText3.getText().toString()))))))))))))))))))))))))))))))))))))))))); 
      ;};;}); 



} 

回答

2

一般我使用的BigDecimal缩放一个十进制值,并将其显示给用户。让我们这样做editText1:

button2.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
       if (editText19.getText() != null || editText18.getText() != null || editText17.getText() != null || editText16.getText() != null || editText15.getText() != null || editText14.getText() != null || editText13.getText() != null || editText12.getText() != null || editText11.getText() != null || editText10.getText() != null || editText9.getText() != null || editText8.getText() != null || editText7.getText() != null || editText6.getText() != null || editText5.getText() != null || editText4.getText() != null || editText3.getText() != null) { 
        // Create a big decimal with your value 
        BigDecimal bd = new BigDecimal(1.2 * ((11.67 * (Double.parseDouble(editText16.getText().toString())) + ((15.83 * (Double.parseDouble(editText17.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((18.33 * (Double.parseDouble(editText18.getText().toString())) + ((24.17 * (Double.parseDouble(editText19.getText().toString())) + ((22.36 * (Double.parseDouble(editText15.getText().toString())) + ((4.17 * (Double.parseDouble(editText14.getText().toString())) + ((26.66 * (Double.parseDouble(editText13.getText().toString())) + ((4.17 * (Double.parseDouble(editText12.getText().toString())) + ((30.96 * (Double.parseDouble(editText11.getText().toString())) + ((4.17 * (Double.parseDouble(editText10.getText().toString())) + ((35.26 * (Double.parseDouble(editText9.getText().toString())) + ((4.17 * (Double.parseDouble(editText8.getText().toString())) + ((39.56 * (Double.parseDouble(editText7.getText().toString())) + ((4.17 * (Double.parseDouble(editText6.getText().toString())) + ((9.17 * (Double.parseDouble(editText5.getText().toString())) + ((13.33 * (Double.parseDouble(editText4.getText().toString())) + ((17.20 * (Double.parseDouble(editText3.getText().toString()))))))))))))))))))))))))))))))))))))))); 
        // Round value to 2 decimal 
        bd = bd.setScale(2, RoundingMode.HALF_UP); 
        editText1.setText(bd.toString()); 
       } 
      } 
     }); 
+0

这引发了一些错误。 bd之前的BigDecimal需要a;完成我觉得奇怪的事情。它还为我提供了一些快速修复,通常为BigDecimal创建一个字段。 – j1mmyg88

+0

对不起支架后,如果 – Mathroule

+0

你是先生,是一个LEG结束,muchos gracias senor – j1mmyg88

0

我看到两个可能性:

String.format("%.2f", yourValue); 

它会圆你的字符串到小数点后2。

否则,

  • 乘以100
  • 一轮整数值(或小区或楼)
  • 除以100再漂浮
+1

编辑,只是读它说你的价值。需要一些咖啡。 – j1mmyg88

+0

它将采取“yourValue”并正确显示,所以对我来说,计算后。但yourValue仍然具有所有的数字,只有显示的字符串会带有2位数字。如果数字需要四舍五入为2位数,请使用我的第二个建议。 – HpTerm

+0

+1 ;-)我现在去一个,你可以加入(顺便说一句,不是咖啡)。 – HpTerm

0

我强烈建议使用变量,它会让你的生活变得更加轻松,并且这个工具将一个double加到指定的数字上的小数位。

例如:

轮(123.456,2); //返回123.46

+0

我不知道接受数字作为参数的圆形方法。那是一个标准的java/android库吗?我会测试一下。 – HpTerm

+0

我已经输入,在计算之前和计算之后尝试过。而这仍然不起作用 – j1mmyg88

相关问题