2009-02-20 80 views
1

我正在爲一個運行10000個5張牌的10條線索的學校實驗室工作。我必須在每隻手中找到沖洗和配對。我必須找到每條線索的配對和沖刷的百分比。如何在一個雙變量內分兩個整數?

我的問題是,當我試圖讓一對一個線索的百分比,例如

double percent = total_pairs/10000; 

double percent = 5600/10000; 

當我要打印2位小數我的輸出變爲0我收到以下內容

0.00 

使用此代碼

因爲我不希望它截斷我的輸出還是我失去了一些東西

cout<<setiosflags(ios::fixed | ios::showpoint); 
cout<<setprecision(2)<<percent<<endl; 

但是我還是零,我得到實際的數字時,我投它,像這樣

double percent = (double) 5600/10000; 

這是正確的

希望你能理解我。

+0

任何人都可能認爲這個問題是本地化的?這是一個非常全球性的問題 - 必須導致浮動的整數劃分。 – 2016-08-14 06:42:53

回答

7

「total_pairs」是一個int嗎?如果是這樣,則劃分爲整數除法。您需要顯式轉換中的一個號碼爲雙(和其他將自動提升爲雙):

double percent = ((double)total_pairs)/10000; // or just simply 10000.0 
+0

這個小例子顯然並不重要,但我會建議使用更詳細的static_cast ,因爲它可能很難找到c風格的演員。 – CTT 2009-02-20 04:16:10

+0

您還可以編寫:double percent = double(total_pairs)/ double(10000)。較少的parens。 – 2009-02-20 08:16:01

+0

只需用`/ 10000.0`替換`/ 10000`即可。 – 2016-08-14 06:44:45

2

除以整數讓你在C和C++的整數(我不知道正確的英文字爲相應的操作,但10/4給你2,等等...這是劃分的整數部分)。所以如下:

double a = 1000/10000; 

首先計算,作爲一個int,1000/10000(在這種情況下爲0),然後將其轉換爲double。

鑄造的說法是單向的 - 我喜歡簡單地輸入浮動而不是整數自己,但是這是個人喜好:

double a = 1000./10000.; 

(只是一個就夠了:那是1000/10000也能發揮作用)。

8

是的,這是這種情況,下面進行整數除法。結果(0)然後被轉換爲雙精度。

double percent = 5600/10000 

以下部隊5600線是雙所以現在你有雙打的具體分工

double percent = (double) 5600/10000 

如果你的號碼中的一個是恆定的,你可以只是確保你使用十進制格式,它強制浮點除法:

double percent = 5600.0/10000 

我有時使用的另一個技巧是乘以1。0它轉換接下來爲雙:

double percent = 1.0 * inta/intb 
2

與您的代碼的問題:

double percent = (double) 5600/10000; 

是要假設類型轉換適用於5600沒有。實際發生的是分割完成(並截斷,因爲兩個數字都是整數),然後最終結果轉換爲雙精度值。所以,你會得到截斷的結果。上面的代碼相當於:

double percent = (double) (5600/10000); 

您需要的分部功能,因爲您需要分子(第一個數字)是一個雙。你可以通過將括號包裹在圓括號中來做到這一點

double percent = ((double) 5600)/10000; 

如果分子實際上是一個變量,哪一個更有用。或者,如果您正在處理數值常數,則可以在數字的末尾加上一個小數位。

double percent = 5600.0/10000; 
相關問題