有没有办法返回浮点数当前具有的小数位数?
例如:
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)
有没有办法返回浮点数当前具有的小数位数?
Run Code Online (Sandbox Code Playgroud)getPrecision(42.123f); // returns 3
您对“浮点数当前具有的小数位数”的理解是有缺陷的。浮点表示具有有限的精度,不能表示所有有理数。最常见的是,它们以二进制格式表示,许多对您来说看起来很简单的十进制基数是无法表示的。
假设最常见的 IEEE-754 二进制 32 位表示,42.123 不是可表示的数字。当您编写 42.123f 时,编译器将改用最接近的可表示数字。在这种情况下,恰好是 42.1230010986328125,它非常接近 42.123,但不是很准确。您可能会注意到您得到的数字没有“3 位小数”。getPrecision除非浮点表示可以精确地表示所有这些值,否则无法编写这样的函数来为 42.123f 输出 3,以及所有其他潜在值的准确结果。
如果获得与实际表示的值匹配的输出 16 是您正在寻找的,那么答案是:是的,可以编写这样的函数,但是它有什么用呢?
计算小数位有意义的一种表示是文本。您可以计算'.'和'f'给定 string之间的字符数"42.123f"。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |