首页 > 解决方案 > 如何使用整数或在每个括号内四舍五入计算?

问题描述

这是在 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));

        }
    });

}

所以我的问题是如何让这个程序使用整数或至少在每个括号内四舍五入?感谢您提前回答!

标签: javaandroidintegerdoublerounding

解决方案


从在变量的定义中恢复为双精度值开始

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));

等等


推荐阅读