首页 > 解决方案 > 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

我能做些什么?

谢谢!

标签: cfloating-pointembeddedstm32

解决方案


您的代码可能正确地将 8.07999992 舍入为 8.08。但随后它可能会再次打印为 8.07999992。这是由于浮点的精度有限(与类型float相反,精度甚至更有限double),以及二进制中没有像 8.08 这样的数字这一事实。

试试这两件事:

  1. 使用 打印结果%.2f,然后再次使用%.20f。(我假设您正在使用printf.)
  2. 使用类型double而不是float.

另一个要问的问题是,你为什么要四舍五入这些数字?是因为它们只对两个地方有意义吗?是因为您想以这种方式显示它们吗?是因为它们应该代表美元和美分(或其他一些十进制货币)吗?

  • 如果数量仅对两个位置有意义,那么您当前所做的四舍五入应该是正确的。
  • 如果要将浮点数显示到两个位置,只需使用%.2f,不用担心自己显式舍入。
  • 如果您试图操纵美元和美分,那么全面使用整数数学(表示美分)通常要容易得多。

推荐阅读