什么情况下,浮点数舍入

📅 2026/7/17 1:34:38
什么情况下,浮点数舍入
浮点数什么时候会发生舍入一、核心原理计算机二进制浮点数IEEE 754存储空间有限实数无法精确表示、运算后有效位超出存储位数时必须舍入。二、会触发舍入的 4 大类场景1. 十进制小数转二进制存储最常见很多十进制小数无法用有限二进制小数表达存入 float/double 时直接舍入。 例0.1二进制是无限循环小数存进 double 会截断舍入0.2、0.3、0.6同理。 验证0.1 0.2 ! 0.3根源就是存储时舍入。2. 算术运算后有效位数超标浮点数有固定尾数长度float23 位、double52 位加减乘除后有效数字超过尾数容量必须舍入乘法两个 n 位尾数相乘结果是 2n 位超出存储位强制舍入 例0.1 * 0.3除法大概率产生无限二进制小数截断舍入加法 / 减法大数加小数小数低位被丢弃舍入 例1e20 0.10.1 直接丢失无误差但本质是舍入丢弃相近数相减有效数字抵消剩余有效位变少低位舍入。3. 数值超出 / 低于表示范围溢出、下溢上溢运算结果超过浮点数最大值 → 舍入为Inf / -Inf下溢结果极小小于最小规格化浮点数进入非规格化区间尾数低位被迫舍入精度丢失。4. 类型强制转换、精度截断高精度浮点数转低精度位数减少直接舍入double → float52 位尾数压缩到 23 位多余低位舍入float → 整数小数部分直接舍入按语言规则四舍五入 / 向零截断高精度十进制Python decimal转普通 float。三、补充不会舍入的情况十进制小数能转有限二进制小数0.5、0.25、0.75、1.25 等整数范围不超过尾数全部精度double 可以无损保存 ±2⁵³ 以内所有整数运算无舍入运算结果尾数位数刚好匹配存储宽度。四、IEEE 754 默认舍入规则默认四舍六入五成双银行家舍入不是简单四舍五入减少累积误差。总结一句话只要数字无法用有限二进制尾数完整存放无论是存储、计算、类型转换都会触发浮点数舍入。