2013-03-10 54 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 

如果你给两个操作数的/运营商为整数,然后进行分工将是整数除法和浮动不会是这个结果。