确定小数点右边的非零数字的数量

2 c++

我想计算小数点右边的非零和非重复的数量(即1.999999999).例如:

x.xx = 2
x.xxx = 3
x.xxx000 = 3
Run Code Online (Sandbox Code Playgroud)

我可以通过将数字转换为字符串来做到这一点,但我想知道是否有更快的方式使用数学.有任何想法吗?

谢谢.

编辑:许多人似乎认为这是一个愚蠢的差事,因为数字在计算机中的表现方式.但是,请允许我解释问题的背景.假设您要编写一个方法来随机生成浮点数.您生成的数字必须具有一定的精度,因此您必须将随机生成的数字舍入到指定的精度.例如,如果精度为2,则随机数不能为0.012,必须舍入为0.01.问题是你没有提供精度,而是给你增量,在上述情况下将是0.01.给定0.01或0.002或任何其他小于1的增量,您必须找到精度.

编辑:删除了我对术语有效数字的错误用法.

Rob*_*edy 6

显著的数字是不是你通过看数字计算一些东西.您可以根据用于计算所查看数字的其他数字中的有效位数来计算,或者根据用于执行测量的仪器的精度来计算.

不显示或使用不重要的数字,因此您的x.xxx000数字在小数点右侧有六位数这一事实意味着这六个数字都是重要的.数字2.3与数字2.300不同.

当你有一个像2300这样的数字时,是否将零计数为重要的问题会发挥作用,其中数字是10的整数倍.是否有两个有效数字,或者四个?用科学记数法写出来确定:2.3×10 3或2.300×10 3.

大多数语言的本机数字类型(包括C++)都不处理有效数字的概念.一般来说,他们甚至根本不处理数字; 他们处理比特.如果您的实现float类型是32位,那么这些位中的所有32位始终被视为重要位.