如何在计算器上用int显示结果?

mfuanj7w  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(937)

我正在做计算器应用程序。即使我不使用double,结果也会显示double。例)1+1=2.0
但我想要1+1=2
当然,我想保留double,当有double时,比如1.2+1.3=2.5
我应该如何编辑?
我试着这样编辑,但有一个错误。

  1. public void equalsOnClick(View view)
  2. {
  3. Integer result = null;
  4. ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
  5. try {
  6. result = (int)engine.eval(workings);
  7. } catch (ScriptException e)
  8. {
  9. Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
  10. }
  11. if(result != null)
  12. resultsTV.setText(String.valueOf(result.intValue()));
  13. }

主要活动

  1. public class MainActivity extends AppCompatActivity {
  2. TextView workingsTV;
  3. TextView resultsTV;
  4. String workings = "";
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState)
  7. {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. initTextView();
  11. }
  12. private void initTextView()
  13. {
  14. workingsTV = (TextView)findViewById(R.id.workingsTextView);
  15. resultsTV = (TextView)findViewById(R.id.resultTextView);
  16. }
  17. private void setWorkings(String givenValue)
  18. {
  19. workings = workings + givenValue;
  20. workingsTV.setText(workings);
  21. }
  22. public void equalsOnClick(View view)
  23. {
  24. Double result = null;
  25. ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
  26. try {
  27. result = (double)engine.eval(workings);
  28. } catch (ScriptException e)
  29. {
  30. Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
  31. }
  32. if(result != null)
  33. resultsTV.setText(String.valueOf(result.doubleValue()));
  34. }
  35. public void clearOnClick(View view)
  36. {
  37. workingsTV.setText("");
  38. workings = "";
  39. resultsTV.setText("");
  40. leftBracket = true;
  41. }
  42. }
fhity93d

fhity93d1#

因为你已经宣布 result 类型, Double . 因此,在你施展之前 doubleValue() 变成一个 int 并将其设置为 resultsTV ,其 double 值将在那里设置。
更改方法定义如下:

  1. public void equalsOnClick(View view) {
  2. Double result = null;
  3. ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
  4. try {
  5. result = (Double)engine.eval(workings);
  6. if(result != null) {
  7. int intVal = (int)result.doubleValue();
  8. if(result == intVal) {// Check if it's value is equal to its integer part
  9. resultsTV.setText(String.valueOf(intVal));
  10. } else {
  11. resultsTV.setText(String.valueOf(result));
  12. }
  13. }
  14. } catch (ScriptException e) {
  15. Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
  16. }
  17. }

注意,我也搬走了 resultsTV.setText 内部 try-catch 块,以便仅当 result = (Double)engine.eval(workings) 不会引发异常。

展开查看全部
1tu0hz3e

1tu0hz3e2#

使用模运算符检查double是整数(结果%1==0)还是math.floor,然后检查结果是否更改。
如果是,则可以使用integer.valueof(result)
顺便说一下,integer有一个内置的tostring方法。

相关问题