2013-03-10 53 views
0

我正在學習C++,並在簡單的程序中遇到這些問題,所以請幫助我。Float variable in C++

這是代碼

#include<iostream> 
using std::cout; 
int main() 
{ float pie; 
    pie = (22/7); 
    cout<<"The Value of Pi(22/7) is "<< pie<<"\n"; 
    return 0; 
} 

和輸出

The Value of Pi(22/7) is 3 

爲什麼Pi的不是十進制值?

+0

@WhozCraig感謝很多:) – prabuksara 2013-03-10 06:59:55

+0

[這](http://stackoverflow.com/questions/15319690/c-char-and-cin#comment21629645_15319690) – 2013-03-10 07:09:35

回答

3

那是因爲你在做整數除法

你想真的浮師什麼:

#include<iostream> 
using std::cout; 
int main() 
{ 
    float pie; 
    pie = float(22)/7;//  22/(float(7)) is also equivalent 

    cout<<"The Value of Pi(22/7) is "<< pie<<"\n"; 
    return 0; 
} 

然而,這種類型的轉換:float(variable)float(value)不是類型安全的。

你可能已經得到了你確保想要的值,你是計算了浮點開始與如下值:

22.0/7 

OR

22/7.0 

OR

22.0/7.0 

但是,這通常是一個麻煩,並會涉及到你跟蹤你所有的類型與...合作。因此,最後和最好的方法是使用的static_cast

static_cast<float>(22)/7 

OR

22/static_cast<float>(7) 

至於爲什麼你應該使用的static_cast - 看到這一點:

Why use static_cast<int>(x) instead of (int)x?

0
pie = (22/7); 

這裏的除法是整數除法,因爲兩個操作數都是int

你打算做什麼是浮點除法:

pie = (22.0/7); 

這裏22.0double,這樣的劃分成爲浮點除法(即使7仍然是int)。

的規則是,如果兩個操作數都是整數類型(如intlongchar等),那麼它是整數除法,否則爲浮點除法(即,當即使單個操作數是floatdouble )。

+1

非常感謝:) – prabuksara 2013-03-10 06:59:31

0

用途:

 pi = 22/7.0 

如果你給兩個操作數的/運營商爲整數,然後進行分工將是整數除法和浮動不會是這個結果。