当前位置: 首页 > web >正文

浮点数截断法:四舍五入的精确模拟

理论解释:

1. 目标

假设 a = 3.14159,我们想四舍五入到 小数点后两位(即 3.143.15)。

2. 步骤拆解

     (1) a * 100

  • a 放大 100 倍,让小数点后两位变成整数部分:
  • 3.14159 * 100 = 314.159

    (2) + 0.5

  • 关键步骤:如果小数部分 ≥ 0.5,则整数部分 +1
  • 314.159 + 0.5 = 314.659
  • 如果原数是 3.146(即 314.6),则:

  • 314.6 + 0.5 = 315.1

    (3) (int) 强制截断

  • 强制转换为 int丢弃小数部分(不是四舍五入,而是直接截断):
  • (int)314.659 = 314
    (int)315.1 = 315

    这样:

  • 314.159 → 314(因为 0.659 < 1,相当于 3.14159 舍去)
  • 314.6 → 315(因为 0.1 < 1,但整数部分已经是 315,相当于 3.146 进位)

     (4) / 100.0

  • 最后缩小 100 倍,恢复原来的数量级:
  • ​314 / 100.0 = 3.14
    315 / 100.0 = 3.15

    3. 为什么能保证精确?

  • 浮点数存储可能不精确(如 3.145 可能存储为 3.144999999...),直接用 %.2f 可能会错误舍入。
  • (int)(x + 0.5) 是经典的“四舍五入”方法,不依赖浮点数的内部表示,而是利用整数截断特性,确保:
  • 小数部分 ≥ 0.5 → 进位
  • 小数部分 < 0.5 → 舍去

例题:

代码如下:

错误示例

(1)

(2)

(3)

正确代码:

http://www.xdnf.cn/news/6805.html

相关文章:

  • 第三十二节:特征检测与描述-Harris 角点检测
  • 实变函数 第二章 点集
  • 数据结构与算法——单链表(续)
  • NoSQL数据库复习题目要点
  • 北斗导航 | 基于深度学习的卫星导航数据训练——检测识别故障卫星
  • windows编程:LIB和OBJ格式文件解析
  • 【Linux网络】数据链路层
  • buuctf Crypto-鸡藕椒盐味1
  • 现代计算机图形学Games101入门笔记(十一)
  • AML 数据集
  • 内网im聊天软件,私有化部署安全可控
  • 2025认证杯二阶段C题完整论文讲解+多模型对比
  • Vue3:脚手架
  • 一分钟了解Python编程语言
  • 科技项目验收测试对软件产品和企业分别有哪些好处?
  • 机器学习知识自然语言处理入门
  • allure报告自定义logo和名称
  • 什么是SMBus
  • 医疗机械中丝杆支撑座有什么特殊要求?
  • 前端精度问题全解析:用“挖掘机”快速“填平精度坑”的完美解决方案
  • 支付宝授权登录
  • ROS2学习(4)------ROS2工作空间介绍
  • Vue3基础学习(中)
  • 高标准农田灌区信息化赋能粮食产能提升
  • 二维数组以及C99中的变长数组(如何在VS2022中使用苹果的clang编译器)
  • 智慧灌区信息化节水灌溉系统解决方案
  • 基于 nvitop+Prometheus+Grafana 的物理资源与 VLLM 引擎服务监控方案
  • 【Python】EAFP?请求原谅比请求允许容易?
  • 小白学编程之——深入理解Java线程的完整生命周期
  • 研华服务器ASMB-825主板无法识别PCIE-USB卡(笔记本)