2012-06-05 3 views
0

Я рассмотрел способы решения этой проблемы. Я все еще очень новичок в java и просто смотрю в нее, и я как бы начинаю погружаться в нее и сталкивался с проблемой. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу изменить количество десятичных мест, которые выводятся с помощью этого «Tip Calculator», который я делаю, и также хочу, чтобы он форматировался в валюте с помощью символа $. Мой код ниже, я используюИспользование DecimalFormat с Android-разработкой

public class TipCalculatorActivity extends Activity { 

     DecimalFormat money = new DecimalFormat("$0.00"); 
     EditText costofmeal, tippercent; 
     TextView tiptotal, totalbill; 
     Button calctipbtn; 
     BigDecimal costNum, percentNum, billNum; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      calctipbtn = (Button) findViewById(R.id.calctipbtn); 
      costofmeal = (EditText) findViewById(R.id.CostofMeal); 
      tippercent = (EditText) findViewById(R.id.PercentTipText); 
      tiptotal = (TextView) findViewById(R.id.tiptotal);  
      totalbill = (TextView) findViewById(R.id.totalbill); 
      calctipbtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       costNum = new BigDecimal(costofmeal.getText().toString()); 
       percentNum = new BigDecimal(tippercent.getText().toString()); 

       tiptotal.setText(costNum.multiply(percentNum).toString()); 
       System.out.println(money.format(tiptotal)); 

       costNum = new BigDecimal(costofmeal.getText().toString()); 
       billNum = new BigDecimal(tiptotal.getText().toString()); 


       totalbill.setText(costNum.add(billNum).toString()); 
       System.out.println(money.format(totalbill)); 
      } 
      }); 
    } 
} 

Мой метод мышления был в основном, что я мог бы иметь выход уравнения, а затем я мог бы использовать money.format и вызвать textview, который я использовал, и было бы отформатировать его в DecimalFormat, что у меня было. Вместо этого теперь приложение силы закрывается, когда я нажал на кнопку вычислить ошибки журнала я получаю

06-04 21:32:57.242: D/AndroidRuntime(1905): Shutting down VM 

06-04 21:32:57.242: W/dalvikvm(1905): threadid=1: thread exiting with uncaught exception (group=0x40015578) 

06-04 21:32:57.257: E/AndroidRuntime(1905): FATAL EXCEPTION: main 

06-04 21:32:57.257: E/AndroidRuntime(1905): java.lang.IllegalArgumentException 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at java.text.NumberFormat.format(NumberFormat.java:308) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at 
java.text.DecimalFormat.format(DecimalFormat.java:714) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at java.text.Format.format(Format.java:93) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at com.verge.tipcalc.TipCalculatorActivity$1.onClick(TipCalculatorActivity.java:50) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at android.view.View.performClick(View.java:2537) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at android.view.View$PerformClick.run(View.java:9157) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at 
android.os.Handler.handleCallback(Handler.java:587) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at android.os.Handler.dispatchMessage(Handler.java:92) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at android.os.Looper.loop(Looper.java:130) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at android.app.ActivityThread.main(ActivityThread.java:3687) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at java.lang.reflect.Method.invokeNative(Native Method) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at java.lang.reflect.Method.invoke(Method.java:507) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 

06-04 21:32:57.257: E/AndroidRuntime(1905):  at dalvik.system.NativeStart.main(Native Method) 

Все, что я хочу сделать, это вокруг totalbill и tiptotal до 2 знаков после запятой и он отформатирован в валюте я попытался как 3-4 метода, я поднял глаза, и ни один из них не был успешным.

+0

Просьба включить весь список ошибок logcat. – Sam

ответ

1

lYou нужно будет сделать это, как это -

DecimalFormat money = new DecimalFormat("00.00"); 
money.setRoundingMode(RoundingMode.UP);// you can also use DOWN here if you dont need to round up the decimal. 
. 
. 
System.out.println(money.format(new Double(totalbill.getText()))); 

Важно, что я думаю, что вы пропустили new Double(totalbill.getText()). Вы не можете передать totalBill напрямую, поскольку это textView. Вам нужно будет разобрать его в Double или Flot и передать его в форматтер.

Также $ может быть добавлен позднее к тексту.

totalbill.setText("$" + totalbill.getText()) 
+0

хорошо Kshitij Я попробовал ваши ошибки я получаю Ошибка синтаксиса на Токен (s) Misplaced Construct (s) « Ошибка синтаксиса на маркер».» – Stagnent

+0

, при котором линия вы получаете ошибку? Что делает totalbill .getText() возвращает? это String? – Kshitij

+0

также вам нужно будет сделать то же самое для tiptotal. – Kshitij

0

и может попробовать этот код

Преобразование ур значение BigDecimal как это так, что его десятичное значение будет до 2 мест

BigDecimal bd = new BigDecimal(costNum); 
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
Смежные вопросы