Java代码基础分数百分比计算错误:实际输出76而非预期76.6
问题原因
问题出在整数除法上:代码中agg_marks是int类型,100和500也都是整数,所以agg_marks*100/500会先执行整数运算,直接舍弃小数部分。你的总分为383,383*100=38300,38300/500=76(整数除法只保留商的整数部分),之后再把这个整数结果赋值给double类型的perc,自然就得到76.0而非76.6。
解决方法
只要让运算过程中触发浮点运算即可,有两种常用方式:
方式一:将其中一个整数常量改为浮点数
把100改成100.0或者500改成500.0,这样Java会自动将整个表达式提升为浮点运算:
/** * practice */ public class practice { public static void main(String[] args) { int sc,sst,maths,eng,sans,agg_marks; double perc; sc = 60; sst = 49; maths = 79; eng = 99; sans = 96; agg_marks = sc+sst+maths+eng+sans; perc = agg_marks * 100.0 / 500; // 修改这里,用100.0替代100 System.out.println(agg_marks); System.out.println(perc); } }
方式二:强制转换agg_marks为double类型
先把int类型的总分转换成double,后续运算就会以浮点类型进行:
/** * practice */ public class practice { public static void main(String[] args) { int sc,sst,maths,eng,sans,agg_marks; double perc; sc = 60; sst = 49; maths = 79; eng = 99; sans = 96; agg_marks = sc+sst+maths+eng+sans; perc = (double)agg_marks * 100 / 500; // 强制转换agg_marks为double System.out.println(agg_marks); System.out.println(perc); } }
两种方式都能得到正确的76.6结果,你可以根据习惯选择其中一种。
内容的提问来源于stack exchange,提问作者Shreyash_Sachit_Sahu
相关产品推荐
相关产品推荐

