2012-01-22 89 views
0

我是C++和一般編程的新手。我正在嘗試一些小程序,只是爲了弄髒我的手。以下是我爲計算錐體的體積而創建的程序。C++浮點問題

問題:無論我做什麼輸出總是一個整數。我想把它精確到兩位小數點。我試過把變量加倍和加倍,以獲得更高的精度,沒有任何工作。

我該如何解決這個問題?爲什麼會發生這種情況? (詳細如有可能)到目前爲止,我甚至在UNi問了很多初級講師,沒有人給我一個正確的答案。

int main(){ 
    float radius,length,volume ; 
    const float PI =22/7.0f; 
    cin >> radius >> length; 
    volume =1/3.0f *radius*radius*length; 
    cout << "Volume is " << volume <<endl; 
    return 0; 
} 

我在Fedora

EDIT使用克++:我想這earlyer具有輸入像50 60/70一百二十零分之五十〇40其給出整數。較小的輸入如3 4給出小數。

編輯:setprecision()的作品。感謝大家發送這個

+3

該代碼打印大量小數。 (而且PI的近似值很弱。) – Mat

+0

OMG,它是真的O.O http://thedailywtf.com/Articles/The-Object-Test,-a-New-PI,-and-More-SHEEIT.aspx –

回答

1

上面發佈的程序(將th缺失#include <iostream>using namespace std;)會在小數點後爲我生成幾位數字。如果你想讓它小數點後產生完全相同兩位小數,你需要使用這樣的事情:

std::cout << std::fixed << std::setprecision(2); 

地方之前,你的輸出(後者操縱在<iomanip>聲明)。默認精度是使用6位數字並決定如何最好地分配它們(這可能意味着如果值變得太大或太小,則輸出變爲科學記數法)。

順便說一句,不要使用std::endl,除非你真的想刷新你的輸出流。我發現了幾個不適當使用std::endl變成主要性能問題的案例。

2

我沒有看到你的代碼有什麼問題,我不能重現你正在報告的行爲。

話說回來,如果我是你,我會用setprecision()實驗:

cout << "Volume is " << setprecision(8) << volume <<endl;