2016-12-17 34 views
0

我想用C++與CIN十進制數​​的程序和cout十進制 後面的數字,例如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. 可以解釋我這個代碼的問題是什麼? 謝謝

+1

https://docs.oracle.com/cd/E19957 -01/806-3568/ncg_goldberg.html – Lucero

+0

[這是相同的作業問題](http://stackoverflow.com/questions/41197021/separating-decimal-points-into-two-整數)? – PaulMcKenzie

+1

問題是浮點數是近似值。 '.258'不能完全表示,內部是'.25800000000000001'或'.25799999999999999'。 – Barmar

回答

0

我不確定爲什麼你的代碼不能正常工作(您正在使用什麼編譯器?),但我認爲這可能涉及到

b=a; 

嘗試明確鑄造你的浮動爲int

b = int(a); 

或者,你可以選擇不使用int和輪向下浮動使用功能floor通過包括math.h中#include <math.h>

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

C++允許浮點數的十進制表示,但據我所知,所有現存的實現都使用二進制表示。然後,將用戶的十進制數規範存儲爲浮點值的想法會丟失關於小數位的關鍵信息:它們根本就不存在。因此,要計算規格中的小數位數,您必須將其存儲爲字符串。

僞代碼:

  1. 輸入號碼指定爲字符串,例如使用getline
  2. 驗證它是有效的數字規範,例如,使用stod
  3. 掃描從右邊的第一期間,調用此位置P
  4. 掃描從位置的小數位的最大數目P.