如何在小数后找到数字?

时间:2016-12-17 09:22:52

标签: c++ decimal

我想用C ++编写一个程序来编写一个十进制数字并输入Decimal之后的数字 例如0.26547 - > 5。

我写了这个,但没有正常工作:

       int main()
 {
 int i=0,b;
float a ;
  cin>>a ;
   while(a!=0)
  {
    a*=10 ;
    b=a ;
    a-=b ;
    i+=1 ;
 }
 cout<<i ;
 }

例如,对于0.258而不是3,返回20。 可以解释一下这段代码的问题是什么? 谢谢

2 个答案:

答案 0 :(得分:2)

C ++允许浮点数的十进制表示,但据我所知,所有现存的实现都使用二进制表示。然后将用户的十进制数规范存储为浮点值的想法丢失了关于十进制数字的关键信息:它们根本就不存在了。因此,要计算规范中的小数位数,必须将其存储为字符串。

的伪代码:

  1. 输入数字规范作为字符串,例如使用getline
  2. 验证它是有效的数字规范,例如使用stod
  3. 从右侧扫描第一个时段,调用此位置P。
  4. 扫描位置P的最大小数位数。

答案 1 :(得分:0)

我不确定为什么你的代码不起作用(你使用什么编译器?),但我认为它可能与

有关
b=a;

尝试将float显式转换为int

b = int(a);

或者,你可以选择不使用int,并使用函数floor将float向下舍入,包括math.h #include <math.h>

float a = 5.9f;
float b = floor(a);
a -= b;