c - STM32F中C中的圆形浮点数
问题描述
我想将两个浮点值四舍五入只有两位小数。
这是浮点数数组:
float result[2];
这是舍入操作:
result[0] = roundf( result[0] * 100 ) / 100;
result[1] = roundf( result[1] * 100 ) / 100;
对于 的值:
-3.99520659
我期望-4,我得到-4
但对于 的值:
8.07999992
我期望 8,但我得到相同的数字。
对于其他场合,我希望数字看起来像 3.4 o -2.1
我能做些什么?
谢谢!
解决方案
您的代码可能正确地将 8.07999992 舍入为 8.08。但随后它可能会再次打印为 8.07999992。这是由于浮点的精度有限(与类型float
相反,精度甚至更有限double
),以及二进制中没有像 8.08 这样的数字这一事实。
试试这两件事:
- 使用 打印结果
%.2f
,然后再次使用%.20f
。(我假设您正在使用printf
.) - 使用类型
double
而不是float
.
另一个要问的问题是,你为什么要四舍五入这些数字?是因为它们只对两个地方有意义吗?是因为您想以这种方式显示它们吗?是因为它们应该代表美元和美分(或其他一些十进制货币)吗?
- 如果数量仅对两个位置有意义,那么您当前所做的四舍五入应该是正确的。
- 如果要将浮点数显示到两个位置,只需使用
%.2f
,不用担心自己显式舍入。 - 如果您试图操纵美元和美分,那么全面使用整数数学(表示美分)通常要容易得多。
推荐阅读
- node.js - 在Node js中,为什么我的controller.js在调用model.js函数后没有显示数据
- python - 在密码更改中限制相同的密码
- c++ - mpf_class 设置精度、分配、释放和转换为字符串
- python - 使用 PyPDF2 从 pdf 文件中读取任何内容
- .htaccess - Codeigniter:禁止,您无权访问此资源。它指的是什么确切的资源。?
- javascript - 下拉菜单以及如何使用 jQuery 更改请求的图片数量
- ruby-on-rails - 如何在 Rails 中只需要 PW 的情况下进行无用户名登录
- svelte-3 - Svelte - 将 use:action 传递给子组件
- javascript - 使用 webpack 时找不到 vertx 模块
- javascript - 带有嵌套 timeOut 的 timeInterval