2012-02-08 8 views
1

これは基本単位変換アプリケーションです。摂氏/華氏変換時に値が正しくない

私はちょうどコーディングを終了し、華氏と摂氏の計算を除いてすべて正常に動作します。数式は正しいが、その理由を知らない。ここで

Activity.Java

package arirang.unit.converter; 

import java.text.DecimalFormat; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.EditText; 
import android.widget.TextView; 


public class BasicUnitConverterActivity extends Activity { 

    EditText val3; 
    String val2; 
    int val1; 
    String forResult; 
    Spinner Type; 


    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Spinner spinner1 = (Spinner) findViewById(R.id.Spinner1); 
     ArrayAdapter adapter1 = ArrayAdapter.createFromResource(
      this, R.array.UnitList, android.R.layout.simple_spinner_item); 
     adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner1.setAdapter(adapter1); 
    } 

    private String changeFormat(Double dbResult) { 
     String result; 

     DecimalFormat format = new DecimalFormat(); 
     result = format.format(dbResult); 
     return result; 
    } 



    public void converter(View View) { 


     EditText val3 = (EditText) findViewById(R.id.BeforeBox); 
     String val2 = val3.getText().toString(); 
     if (val2.length() > 0) { 

      val1 = Integer.parseInt(val2); 
      Type = (Spinner) findViewById(R.id.Spinner1); 

      double dbResult = 0; 

      if (Type.getSelectedItem().toString().equals("meter to inch")) { 
       dbResult = val1 * 39.3700787; 
      } else if (Type.getSelectedItem().toString().equals("meter to feet")) { 
       dbResult = val1 * 3.2808399; 
      } else if (Type.getSelectedItem().toString().equals("feet to inch")) { 
       dbResult = val1 * 12; 
      } else if (Type.getSelectedItem().toString().equals("feet to meter")) { 
       dbResult = val1/3.2808399; 
      } else if (Type.getSelectedItem().toString().equals("inch to meter")) { 
       dbResult = val1/39.3700787; 
      } else if (Type.getSelectedItem().toString().equals("inch to feet")) { 
       dbResult = val1/12; 
      } else if (Type.getSelectedItem().toString().equals("kilogram to pound")) { 
       dbResult = val1 * 2.20462262; 
      } else if (Type.getSelectedItem().toString().equals("pound to kilogram")) { 
       dbResult = val1/2.20462262; 
      } else if (Type.getSelectedItem().toString().equals("Fahrenheit to Celsius")) { 
       dbResult = (val1 - 32) * (5/9); 
      } else if (Type.getSelectedItem().toString().equals("Celsius to Fahrenheit")) { 
       dbResult = (val1 * (9/5)) + 32; 
      } 

      forResult = changeFormat(dbResult); 

      TextView AfterBox = (TextView) findViewById(R.id.AfterBox); 
      AfterBox.setText(forResult); 
     } 
    } 

} 

答えて

6

dbResult=(val1 - 32) * (5/9);あなたは5/9を書くとき、これはあなたがint型の値を分割しているので、結果はとなります0(5がそう9未満であることを意味することに問題があるdbResult=(val1 - 32) * (5f/9);あるべきです10分の9だったら、結果は1だったはずです。引数の1つにfloatするためにキャストを追加することにより、コンパイラは拡張プリミティブ型変換と呼ばれる処理を行い、/演算子の引数の両方を浮動させる。浮動小数点値の間で除算が行われるようになりましたので、結果はあなたが期待しているものになります。

1

私は間違いなく "val1"を浮動小数点にし、すべての計算を "double"空間で行います。完了したら、切り捨てまたは整数に丸めます。計算中ではありません。

double val1; 
    ... 
    dbResult = (val1 * (9.0/5.0)) + 32.0; 
    ... 

私見...

関連する問題