WMX · 随记
·Java· 3 分钟阅读

整数除法:丢失的小数不会在赋值时回来

计算成功率时,把两个整数相除再赋给 double,可能得到 0.0。错误发生在除法表达式内部,改变接收变量的类型不能修复已经丢失的信息。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Java Tutorial for Beginners

Java 基础课程作为语言背景复习;本文的特定 API、版本行为和边界条件以正文及文档为准。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Java 系列概览:类型与值、状态与资源、边界验证
Java 系列概览:类型与值、状态与资源、边界验证 点击图片查看大图 ↗

问题从哪里出现

计算成功率时,把两个整数相除再赋给 double,可能得到 0.0。错误发生在除法表达式内部,改变接收变量的类型不能修复已经丢失的信息。

理解核心机制

Java 会先根据操作数确定运算类型。两个 int 相除得到 int,向零截断;先把其中一个操作数转成 double,才会进行浮点除法。需要精确十进制结果时则另选 BigDecimal。

动手做一个小实验

Java 17 或更新版本;将示例保存为 Demo.java,执行 javac Demo.java 后运行 java Demo。

Java10 行 · 可横向滚动
public class Demo {
    public static void main(String[] args) {
        int success = 7, total = 10;
        double wrong = success / total;
        double right = (double) success / total;
        System.out.println(wrong);
        System.out.println(right);
        System.out.println(-7 / 3);
    }
}

适用边界与常见误区

整数除零会抛异常,浮点除零则可能产生 Infinity 或 NaN。展示百分比之前要单独处理分母为零,不要把“无样本”偷偷显示为零成功率。

继续练习

把成功数设为 0、7、10,把总数设为 0 和 10,列出期望的业务显示值。再区分“没有请求”和“请求全部失败”这两种情况。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档