android EditText计算错误的结果

时间:2015-07-14 12:57:45

标签: java android

我试图制作一个在摄氏和华氏之间转换的简单APP:

我写了两个EditText,一个用于输入,另一个用于输出,我还有两个按钮(toCtoF)。

代码如下:

public class MainActivity extends ActionBarActivity {

private EditText EditText_input;
private EditText EditText_output;

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

    EditText_input = (EditText) findViewById(R.id.input);
    EditText_output = (EditText) findViewById(R.id.output);

    Button toC = (Button) findViewById(R.id.c);
    toC.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String inputS = EditText_input.getText().toString();
            double inputD = Double.parseDouble(inputS);
            double outputD = (5/9) * (inputD-32);
            String outputS = String.valueOf(outputD);

            //Toast.makeText(MainActivity.this,String.valueOf(outputD),Toast.LENGTH_LONG).show();
            EditText_output.setText(outputS, TextView.BufferType.EDITABLE);
        }
    });

    Button toF = (Button) findViewById(R.id.f);
    toF.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            String inputS = EditText_input.getText().toString();
            double inputD = Double.parseDouble(inputS);
            double outputD = (9/5) * inputD + 32;
            String outputS = String.valueOf(outputD);

            EditText_output.setText(outputS, TextView.BufferType.EDITABLE);
        }
    });

}

单击按钮toC后,它始终生成0.0,单击按钮toF会产生错误的结果。我将inputType的{​​{1}}设置为EditText,我尝试了数字,但仍然无效。

我检查了问题来自numerdecimal,但我不知道为什么outputD无法获得正确的结果。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

当您计算double outputD = (5/9) * (inputD-32);时,编译器会假定59int s,因此5/9为零。如果您希望编译器将数字视为doubles,则应编写double outputD = (5.0/9.0) * (inputD-32);。这同样适用于第二次转化 - double outputD = (9/5) * inputD + 32;

答案 1 :(得分:0)

5和9都是整数,这就是它总是给出整数的原因 所以5/9总是会给0。 做了 5 / 9.0 或5.0 / 9.0 它肯定会工作

答案 2 :(得分:0)

编译器将除法(5/9)视为整数除法。 因此,第一个结果始终为零。 您可以将其中一个数字设为双倍,如5.0或9.0

double outputD = (5.0/9) * (inputD-32);

或者

double outputD = (5/9.0) * (inputD-32);

double outputD = (5.0/9.0) * (inputD-32);