2016-09-30 25 views
-2

我試圖執行一個操作,將從用戶的直徑輸入中找到一些披薩片(家庭作業分配),但我的問題是,C++在操作過程中保持四捨五入。這裏的如何防止操作中的小數舍入?

//Calculates the number of slices that can be obtained using the diameter from the user's input 
    sliceNumber = (pi *(pow((pizzaDiameter/ 2.0) , 2.0)))/sliceArea; 

//Outputs the number of slices that can be cut, accurate to 1 decimal point using the command "setprecision" 
    cout << "The number of slices your pizza can be divided into is "; 
    cout << setprecision(2) << sliceNumber << endl; 

最終的結果應該四捨五入至小數點後一位的代碼,因爲它是被迫與setprecision這是正確的。但是當我用計算器自己解決問題時,結果有點不同。例如,我會在程序中輸入直徑10,它將輸出5.4,即使在真實的計算器上它是5.6。 (切片的#通過找到比薩餅的面積然後通過14.125,其被聲明爲sliceArea除以找到)

pi被聲明爲3.14的恆定整數,二者sliceNumbersliceDiameter被聲明爲一倍。 sliceArea被聲明爲14.125的整數。

+5

* pi被聲明爲3.14的常量整數*什麼!我從你的問題推斷你是初學者。如有必要,請在教程中向前跳至解釋整數和浮點數之間差異的頁面。或者如果您閱讀該頁面的速度太快,請跳過。 –

+3

在強類型語言(如C++)中發佈一個關於「爲什麼不提供預期結果」的問題,但在示例代碼中不包括類型聲明,這意味着問題不清楚。每個變量的確切類型是任何C++代碼示例的關鍵部分。在散文中陳述他們的類型是不夠的,因爲我們不能確定你的意思是說你的意思,而是真正地說出你的意思。 – DevSolar

回答

3

如果sliceAreaint,則值是14而不是14.125。同樣,如果piint,則值爲3,而不是3.14。並非巧合的是,(3 * pow(10/2.0, 2.0))/14來到5.357...這將圍繞到5.4與兩位數的精度。您需要聲明這些值爲double(或float),否則您的編譯器將截斷小數值以得到int

+0

注意:我希望大多數編譯器會警告您將'const int'定義爲等於'double'文字;你可能想要在你的編譯器上調出警告級別,或者注意它給你的警告。 – ShadowRanger