簡體   English   中英

為什么cout的輸出<< 7/9 * 9; 是零?

[英]Why is the output of cout << 7/9*9; is zero?

為什么以下代碼的輸出等於0或serven?

cout << 7/9*9;   //output 0 (zero)   why?

float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i     //output 7   Why?

謝謝您的幫助。

7/9 * 9將這些數字評估為整數,因此7/9的計算結果為0,0 * 9 = 0。

當你使它們浮動時,你正在執行預期的計算。

嘗試7.0 / 9 * 9得到7,然后你將進行浮點運算。

在C中,當您對整數進行除法時,其余部分將被丟棄。 在這里,你正在做7/9,然后取結果並乘以9.在步驟中,接下來是C的想法:

7 / 9 = 0
0 * 9 = 0

使用浮動時,它可以正常工作,因為其余部分不再被丟棄。

在:

cout << 7 / 9 * 9;

你正在做整數運算。 所以7/9是0而0 * 9是0。

要使用浮點運算(這是您在第二個示例中使用的),您要執行以下操作:

cout << 7.0 / 9 * 9;

7/9*9的equals (7 / 9) * 9 ,但作為79是整數,並且不浮點數, 7 / 9等於0(除法的商)。

我認為這是一個精確的問題。 /和*運算符的優先級相同,因此7/9 * 9從左到右依次為(7/9)* 9。 問題是(7/9)在整數運算中為0。 當你明確地將它們存儲為浮點數時,/操作是以浮點形式完成的,它可以以比int更高的精度存儲7/9。

如果要在沒有精度問題的情況下在一行中進行計算,請嘗試:

cout << 7.0f / 9.0f * 9.0f;

許多正確的答案已經。 附加說明:如果要將其保留為整數運算而不使用浮點,則需要對其進行排序,以便在除數之前進行乘法以獲得最高精度(只要在乘法過程中不發生溢出。比(7.0/9)*9將轉換為浮點數,你可以做(9*7)/9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM