【发布时间】:2015-03-23 22:09:46
【问题描述】:
我正在制作一个 Android 计算器,当我除以零时得到 9.223372E+18。为什么它不显示 NaN 或崩溃?我认为它会导致 9.223372E+18 因为这是可能的最大双精度值,因为我要除以零并使用双精度数据类型。既然它会让用户感到困惑,我该如何解决这个问题?
回复评论
大家好,感谢您的所有回复。我很感激。我在下面发布了我的代码。
public class CFM extends ActionBarActivity {
Double cfm, ac, volume;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cfm);
EditText e1 = (EditText) findViewById(R.id.editText1);
EditText e2 = (EditText) findViewById(R.id.editText2);
TextView t1 = (TextView) findViewById(R.id.editText3);
t1.setEnabled(false);
t1.setFocusable(false);
e1.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
EditText e1 = (EditText)findViewById(R.id.editText1);
EditText e2 = (EditText)findViewById(R.id.editText2);
volume = Double.parseDouble(e1.getText().toString());
cfm = Double.parseDouble(e2.getText().toString());
TextView t1 = (TextView) findViewById(R.id.editText3);
ac = cfm * 60 / volume;
t1.setText(Double.toString((double) Math.round(ac * 100) / 100));
}
});
e2.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
EditText e1 = (EditText)findViewById(R.id.editText1);
EditText e2 = (EditText)findViewById(R.id.editText2);
volume = Double.parseDouble(e1.getText().toString());
cfm = Double.parseDouble(e2.getText().toString());
TextView t1 = (TextView) findViewById(R.id.editText3);
ac = cfm * 60 / volume;
t1.setText(Double.toString((double) Math.round(ac * 100) / 100));
}
});
}
【问题讨论】:
-
请给出演示这个的示例代码。
-
也许你应该在除法之前检查分母是否为零,如果是,使用你自己的NaN?
-
9.223372E+17 怎么样?您是指仅按该数字的问题还是除以零的一般问题?
-
9.223372E+18 甚至不接近最大可能的有限
double值(即~1.8E+308)。然而,它是最大的long值。我认为您的代码中还有其他内容。你能发布一个简单(希望只有几行)完整的程序来演示这个问题吗?