2012-04-11 7 views
0

は、数学のabitから始めることができます。アンドロイドは、ユーザー提供の入力から不正な減算を受け取ります。

ターゲット重み= 8.4 電流量= 9.1 電流量 - 目標量= 0.7(あなたがそう思うだろう)

if(obj != null && obj.targetWeight != null && obj.currentWeight != null) { 
      try { 
       double i = Double.parseDouble(obj.targetWeight); 
       double o = Double.parseDouble(obj.currentWeight); 
       //do something if target weight is a number 
       if(i>o){ 
        outputEditText.setText ("Congratulations. you have passed your target weight"); 
       } 
       else if (i<o){ 
        outputEditText.setText(
          "Your Target Weight is " + obj.targetWeight +obj.unit + "\n" + 
            "Your Current Weight is " + obj.currentWeight + "\n" + 
            "Difference is " + (o - i)); 
       } 

両方目標= 0.6999999999999993

上記8.4から9.1に従います現在の重みはユーザーが入力したもので、2重として解析されます。

誰も私が間違って

をやっているあなたは何も悪いことをやっていない多くのおかげ

答えて

4

を知っているん。素晴らしい浮動小数点演算の世界へようこそ!私たちにとってすばらしく見える数字の多くは、コンピュータで使用されているバイナリナンバーシステムで正確に表現することはできません。

あなたの直ぐ問題に対する答えはです。生の倍精度数値だけを出力することは決してできません。あなたは常にを使用しなければなりません。たとえば、適切な小数点以下の桁数を提示するには、DecimalFormatなどがあります。小数点以下5桁まで四捨五入された番号は0.7として印刷されます。

+0

ol。私はちょうど浮動小数点arithmaticに関する記事を見つけました。ダムはばかです。回避策はありますか?これは、アプリケーションの機能を持っている必要があります –

+0

@ TuffyG x桁の答えを四捨五入してユーザーフレンドリーな表現にすることができます。 – Jave

+0

すべての浮動小数点計算に絶対精度を持たなければならず、大きなパフォーマンスヒットが気にならない場合は、常に十進数を正確に表すことができる 'BigDecimal'クラスを使用することができます。しかし、通常、丸め/書式設定は十分です。 –

1

すべての小数点以下の桁数は、基数2で完全に表現できるわけではありません。そのため、丸みを帯びて、見たことがあることがよくあります。 .6999999 ...の出力は、お使いの入力の近似2を使った減算のコンピュータでの最善の近似です。

0

お返事ありがとうございます。

マシンの世界が私の脳のように思えるものとは異なることが分かります。

ここに私の問題を解決するために行ったことがあります。

DecimalFormat df = new DecimalFormat("####.##"); 

        String b = df.format(o-i); 
関連する問題