2011-05-23 48 views
28

我在做别的事情,但一切都出来了零,所以我做了这个简约例如,输出仍为0司在C++中工作不正常

#include <iostream> 

int main(int argc, char** argv) 
{ 
    double f=3/5; 
    std::cout << f; 
    return 0; 
} 

我缺少什么?

回答

45

你错过了3和5是整数的事实,所以你得到的是整数除法。为了使编译器执行浮点除法,让他们中的一个实数:

double f = 3.0/5; 
+2

整数与浮点的划分看起来像是一段经文;我知道这是给我的。 – zenzelezz 2011-05-24 12:35:53

9

试试这个:

double f = 3.0/5.0; 

这应该解决您的问题

5

尝试把一个.0之一后,除数。这会将它们转换为浮点文字。

17

它并不需要.0,你也可以做3./53/5.3e+0/53/5e-00xCp-2/5或者......有只需要一个指标涉及这样编译器知道它应该执行划分为浮点。

另一种可能性:double f=double(3)/5。这是更多的打字,但它毫无疑问,你在做什么。

或者干脆用double f=.6,也做的伎俩......

2

您正在使用的整数。你可以做很多事情来让你的常量像leftaroundabout状态一样加倍,但是这并不是很好的清洁。这很难阅读和混淆。如果你想3和5让他们3.0和5.0。如果他们被迫读取你的代码,每个人都会知道你的意思。他/她所陈述的大部分内容都需要您了解C/C++以及如何使用浮点数来存储头部或尾部。

+0

嗯,我认为很明显'0xCp-2/5'不会被认真考虑! ...但至于使用3.0:这是一个品味问题。我个人不喜欢这样写,因为在科学中,小数点后的数字有限数字暗示了测量值等方面的某种不准确,所以当我看到3.0时,我总是认为3±.05和3.0/5.0对我来说是.6±.01。这不是双精度!我更喜欢'3./5'。 – leftaroundabout 2011-05-23 23:03:05

+0

我的文章的重点是让阅读更容易。 3./5看起来不像标准的数学公式。你需要了解你的观众:我不认为这张海报(如果他们与一个真正的和不同的int有关的问题)是为高层次的科学应用程序设计的,所以我认为越简单越好。 – 2011-05-23 23:24:39