1

私は Android 用の電卓を作成しています。これまでのところ、ほとんど完成しているように見えます...問題は、答えが正確ではないことです。通常、小数は必要ないため、加算、減算、乗算は正常に機能します..除算に関しては、回答は、回答を10進数で表示するのではなく、最も近い整数に丸められます...したがって、TextViewタイプを変更して小数を表示し、回答を含む変数にintではなくfloatを使用しました。結果は、末尾が「.00」の丸められた整数になります:/助けてください! 私のコード: MainActivity.java :

package in.rohanbojja.basiccalculator;

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    public void add( View view){

        EditText n1 = (EditText) findViewById(R.id.editText1);
        EditText n2 = (EditText) findViewById(R.id.editText3);
        TextView res = (TextView) findViewById(R.id.textView1);

        String sn1 = n1.getText().toString();
        String sn2 = n2.getText().toString();
        String sres;

        int in1 = Integer.parseInt(sn1);
        int in2 = Integer.parseInt(sn2);
        float ires;

        ires = in1 + in2;
        sres = Float.toString(ires);
        res.setText(sres);
}
public void sub( View view ){

    EditText n1 = (EditText) findViewById(R.id.editText1);
    EditText n2 = (EditText) findViewById(R.id.editText3);
    TextView res = (TextView) findViewById(R.id.textView1);

    String sn1 = n1.getText().toString();
    String sn2 = n2.getText().toString();
    String sres;

    int in1 = Integer.parseInt(sn1);
    int in2 = Integer.parseInt(sn2);
    float ires;

    ires = in1 - in2;
    sres = Float.toString(ires);
    res.setText(sres);
}
public void mul( View view ){

    EditText n1 = (EditText) findViewById(R.id.editText1);
    EditText n2 = (EditText) findViewById(R.id.editText3);
    TextView res = (TextView) findViewById(R.id.textView1);

    String sn1 = n1.getText().toString();
    String sn2 = n2.getText().toString();
    String sres;

    int in1 = Integer.parseInt(sn1);
    int in2 = Integer.parseInt(sn2);
    float ires;

    ires = in1 * in2;
    sres = Float.toString(ires);
    res.setText(sres);

}


public void clr( View view ){

    EditText n1 = (EditText) findViewById(R.id.editText1);
    EditText n2 = (EditText) findViewById(R.id.editText3);
    TextView res = (TextView) findViewById(R.id.textView1);

    n1.setText("");
    n2.setText("");
    res.setText("Result");
}

public void div( View view){
    EditText n1 = (EditText) findViewById(R.id.editText1);
    EditText n2 = (EditText) findViewById(R.id.editText3);
    TextView res = (TextView) findViewById(R.id.textView1);

    String sn1 = n1.getText().toString();
    String sn2 = n2.getText().toString();
    String sres;

    int in1 = Integer.parseInt(sn1);
    int in2 = Integer.parseInt(sn2);
    float ires;

    ires = in1/in2;
    sres = Float.toString(ires);
    res.setText(sres);
}
}
4

4 に答える 4

4

結果を に格納することで浮動小数点の結果を強制しようとしたようですがfloat、残念ながらこれはできません。除算演算子 ( /) などの Java の演算子は、次のように機能します。

  • 両方のオペランドが浮動小数点の場合、結果は浮動小数点になります。
  • オペランドの 1 つが float の場合、結果は float になります。
  • オペランドのどちらも浮動小数点数でない(つまり、どちらも整数である) 場合、結果はint.

あなたのものは後者のケースに該当するため、整数の結果が得られます。解決策は、次のように、結果の変数だけでなく、オペランドの 1 つを強制的に float にすることです。

ires = ((float) in1) / in2;
于 2013-04-11T19:53:42.050 に答える