C/C++ 计算小数位数?

2024-04-14

假设用户输入的是十进制数,例如。 5.2155(有 4 位小数)。它可以自由存储(int,double)等。

有没有clever(或非常简单)找出数字有多少位小数的方法? (有点像如何通过屏蔽最后一位来发现数字是偶数还是奇数的问题)。


我知道的两种方法,不幸的是都不是很聪明,但这更多的是环境的限制而不是我的限制:-)

第一个是sprintf数字到一个大缓冲区"%.50f"格式化字符串,去掉尾随的零,然后计算小数点后的字符数。这将受到以下限制printf家庭本身。或者您可以使用该字符串作为用户输入(而不是sprintfing 浮点值),从而完全避免浮点问题。

第二种方法是减去整数部分,然后迭代地乘以 10,然后再次减去整数部分,直到得到零。这受到浮点数计算机表示的限制 - 在每个阶段您都可能会遇到无法准确表示数字的问题(因此 .2155 实际上可能是 .215499999998)。类似于以下内容(未经测试,除了在我的脑海中,与 COMX-35 大致相同):

count = 0
num = abs(num)
num = num - int(num)
while num != 0:
    num = num * 10
    count = count + 1
    num = num - int(num)

如果您知道您将得到的数字类型(例如,它们都是小数点后 0 到 4 位数字),您可以使用标准浮点“技巧”来正确执行此操作。例如,代替:

while num != 0:

use

while abs(num) >= 0.0000001:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++ 计算小数位数? 的相关文章

随机推荐