返回浮点数的小数位数

Ale*_*exG 0 c++ c++11

有没有办法返回浮点数当前具有的小数位数?

例如:

getPrecision(42.123f); // returns 3
getPrecision(42.123456f); // returns 6
getPrecision(42.01f); // returns 2
getPrecision(42.0f); // returns 0
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 7

有没有办法返回浮点数当前具有的小数位数?

getPrecision(42.123f); // returns 3
Run Code Online (Sandbox Code Playgroud)

您对“浮点数当前具有的小数位数”的理解是有缺陷的。浮点表示具有有限的精度,不能表示所有有理数。最常见的是,它们以二进制格式表示,许多对您来说看起来很简单的十进制基数是无法表示的。

假设最常见的 IEEE-754 二进制 32 位表示,42.123 不是可表示的数字。当您编写 42.123f 时,编译器将改用最接近的可表示数字。在这种情况下,恰好是 42.1230010986328125,它非常接近 42.123,但不是很准确。您可能会注意到您得到的数字没有“3 位小数”。getPrecision除非浮点表示可以精确地表示所有这些值,否则无法编写这样的函数来为 42.123f 输出 3,以及所有其他潜在值的准确结果。

如果获得与实际表示的值匹配的输出 16 是您正在寻找的,那么答案是:是的,可以编写这样的函数,但是它有什么用呢?

计算小数位有意义的一种表示是文本。您可以计算'.''f'给定 string之间的字符数"42.123f"