c/c++ 浅谈 float/double 浮点数怎么精确保留几位小数? 您所在的位置:网站首页 一位小数乘两位小数等于几位小数 c/c++ 浅谈 float/double 浮点数怎么精确保留几位小数?

c/c++ 浅谈 float/double 浮点数怎么精确保留几位小数?

2024-06-02 13:17| 来源: 网络整理| 查看: 265

关于c/c++ 中 float 怎么转 int 大家都不陌生 那么一个 float/double 怎么精确保留几位小数怎么做到呢? 比如 3.1415926 ,转为 3.14 或者 3.1400000 ? 网上说的办法 类似如下 根本都无法做到想要的结果

在这里插入图片描述

在这里插入图片描述 当然了 通过stream 转为 string 的方式可行, 但是 你把string 转为float 一样还是会出现精度误差, 无法控制准确 在这里插入图片描述 即便std::string 是3.14 转为 float 也是 3.14000010 在这里插入图片描述 roundf 也是一样的结果 在这里插入图片描述 当时尝试了各种办法 无法解决这个问题 boost::multiprecision 库的有个办法可以 但是是内置类型转为原生float 一样是有误差 如果把 BigDecimal 转为float 还是有误差 这里就不说了 在这里插入图片描述

所以我了解了一下原理 得出结论 c/c++ 无法对浮点数精确表示所有实数!

在 C++ 中,浮点数类型(如 float 和 double)使用二进制浮点数表示法来存储和表示实数。这种表示法无法精确地表示所有的实数,尤其是十进制分数。

浮点数使用有限的比特数来表示小数部分,因此在进行浮点数计算时,可能会发生舍入误差。这意味着浮点数在进行运算或转换时可能会产生微小的误差。

例如,将 0.1 这个十进制分数表示为二进制浮点数时,会产生无限循环的二进制表示。然而,由于浮点数的存储精度是有限的,因此只能近似地表示这个分数。当您对这个近似值进行操作时,可能会出现舍入误差。

需要注意的是,对于打印输出的目的,可以使用格式化输出来控制浮点数的显示精度,但这并不改变浮点数本身的精度。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有