java - 如何使用整数或在每个括号内四舍五入计算?
问题描述
这是在 android studio 中用 Java 编码的
所以我在编码方面完全是个菜鸟,我对这个伤害计算器有疑问,我正在尝试根据开发人员共享的计算公式为我玩的这个 mmorpg 创建这个伤害计算器......
所以这就是我最初编写程序的方式:
double skill, bonus, level, attack, min, max, avg, min2, avg2, max2;
EditText txtskill;
EditText txtbonus;
EditText txtlevel;
EditText txtattack;
TextView resmin;
TextView resavg;
TextView resmax;
TextView resmin2;
TextView resavg2;
TextView resmax2;
Button btncalculate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtskill = findViewById(R.id.txtskill);
txtbonus = findViewById(R.id.txtbonus);
txtlevel = findViewById(R.id.txtlevel);
txtattack = findViewById(R.id.txtattack);
resmin = findViewById(R.id.txtmin);
resavg = findViewById(R.id.txtavg);
resmax = findViewById(R.id.txtmax);
resmin2 = findViewById(R.id.txtmin2);
resavg2 = findViewById(R.id.txtavg2);
resmax2 = findViewById(R.id.txtmax2);
btncalculate = findViewById(R.id.btncalculate);
btncalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
skill = Double.parseDouble(txtskill.getText().toString());
bonus = Double.parseDouble(txtbonus.getText().toString());
level = Double.parseDouble(txtlevel.getText().toString());
attack = Double.parseDouble(txtattack.getText().toString());
DecimalFormat df = new DecimalFormat("0.00");
min = ((skill + bonus) / 2 + level / 4 + attack) * 0.9;
max = ((skill + bonus) / 2 + level / 4 + attack) * 1.1;
avg = (min + max) / 2;
min2 = min * 1.05;
max2 = max * 1.05;
avg2 = avg * 1.05;
resmin.setText(df.format(min));
resavg.setText(df.format(avg));
resmax.setText(df.format(max));
resmin2.setText(df.format(min2));
resavg2.setText(df.format(avg2));
resmax2.setText(df.format(max2));
}
});
}
哪个工作得很好......但问题是事实证明游戏中的实际伤害输出实际上是使用整数或在每个括号内四舍五入计算的......
所以这就是我试图修复它的方式:
int skill, bonus, level, attack, min, max, avg, min2, avg2, max2;
EditText txtskill;
EditText txtbonus;
EditText txtlevel;
EditText txtattack;
TextView resmin;
TextView resavg;
TextView resmax;
TextView resmin2;
TextView resavg2;
TextView resmax2;
Button btncalculate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtskill = findViewById(R.id.txtskill);
txtbonus = findViewById(R.id.txtbonus);
txtlevel = findViewById(R.id.txtlevel);
txtattack = findViewById(R.id.txtattack);
resmin = findViewById(R.id.txtmin);
resavg = findViewById(R.id.txtavg);
resmax = findViewById(R.id.txtmax);
resmin2 = findViewById(R.id.txtmin2);
resavg2 = findViewById(R.id.txtavg2);
resmax2 = findViewById(R.id.txtmax2);
btncalculate = findViewById(R.id.btncalculate);
btncalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
skill = Integer.parseInt(txtskill.getText().toString());
bonus = Integer.parseInt(txtbonus.getText().toString());
level = Integer.parseInt(txtlevel.getText().toString());
attack = Integer.parseInt(txtattack.getText().toString());
min = ((skill + bonus) / 2 + level / 4 + attack) * 0.9;
max = ((skill + bonus) / 2 + level / 4 + attack) * 1.1;
avg = (min + max) / 2;
min2 = min * 1.05;
max2 = max * 1.05;
avg2 = avg * 1.05;
//^^在这部分我开始使用这些值进行计算,调试器告诉我它期待一个双倍
resmin.setText(min));
resavg.setText(avg));
resmax.setText(max));
resmin2.setText(min2));
resavg2.setText(avg2));
resmax2.setText(max2));
}
});
}
所以我的问题是如何让这个程序使用整数或至少在每个括号内四舍五入?感谢您提前回答!
解决方案
从在变量的定义中恢复为双精度值开始
int skill, bonus, level, attack, min, max, avg, min2, avg2, max2;
回到
double skill, bonus, level, attack, min, max, avg, min2, avg2, max2;
然后第二步将四舍五入所有数字,然后再将它们设置回 UI 组件,例如:
resmin.setText(Math.round(min));
等等
推荐阅读
- mysql - 如何在没有主键的mysql表中添加主键
- salesforce - DocuSign Apex 工具包使用多个数据源创建信封
- c# - 如何在同一个测试中更新最近添加的实体实例?
- python-3.x - 重新计算 XML 子元素
- c# - 使用 C# 获取具有相同标签名称的所有标签,无论 XML 文件中的级别如何
- rust - Rust“工具链”到底是什么?
- spring-boot - 使用可选和映射在 java 8 中获取和设置值
- php - 删除自定义帖子类型中的 H1 也会删除导航项
- csv - 根据“ID”读取 csv 文件的特定行
- react-datepicker - react-datepicker 为什么突出显示月份的同一天?