AP计算机科学A:结果存进double,为什么5除以2仍可能只得到2.0

变量最后采用什么类型,不会自动改变前面表达式已经执行的运算。排查Java小数结果时,先检查除法发生那一刻两个操作数的类型,而不只看接收结果的变量。

想结合自己的基础讨论下一步?到文末扫码联系翰林,发送“AP整数除法1030”,说明年级、学习目标和目前最困惑的问题。

先判断除法本身的类型

原创示例为int a=5; int b=2; double q=a/b;。a与b都是整数,因此a/b先执行整数除法,得到整数2,再转换成double存入q,结果为2.0。

存储类型扩大了可表示的形式,却无法找回这次整数除法已经舍去的小数。把q写成double,并不等于把a/b自动改成实数除法。

比较转换发生在除法前后

double r=(double)a/b;先把a转换为double,随后执行相应的浮点除法,得到2.5。double s=(double)(a/b);则先算整数除法,再转换,仍得到2.0。

两种写法看起来只差一对括号,却改变了类型转换发生的时机。可以在草稿中给每一步标注类型和值,避免凭外观判断。

计算平均值时检查计数与类型

若总分sum为5、记录数count为2,两者都是int,则sum/count仍为2。需要小数平均值时,可在除法前进行适当转换,例如(double)sum/count。

还要按程序条件确认count不为零。类型转换只解决数值计算方式,并不会同时解决空集合或不合法输入的问题。

不要把整数除法说成四舍五入

Java整数除法向零截断,例如-5/2得到-2,不是-3,也不是把结果按通常四舍五入规则处理。若题目涉及负数,先确认所用语言和具体运算规则。

这是原创AP计算机科学A基础练习,不是官方题目。可以用一组正数与负数表达式逐步追踪,再按College Board当前课程资料核对Java范围与作答要求。

延伸阅读:AP统计还是AP微积分?从学习任务判断选课方向。

带着具体问题,扫码联系翰林

正在了解项目、选择学习方向,或已经开始准备?用微信扫描下方二维码,发送“AP整数除法1030”。请补充年级、所在地区、当前基础和最想解决的问题,方便沟通时直接聚焦。

微信扫码联系翰林,发送AP整数除法1030咨询学习与准备问题

微信咨询学习与准备方向

电脑阅读可用微信扫码;手机阅读可点击入口,或保存二维码后在微信内识别。

官方信息与延伸资料:资料1 资料2

在线客服
微信咨询