2015-02-07 38 views
-4

我是新来的c + +,我试图做一个基本的数学程序,以预热到language.when我试图做问题9/2或任何有小数的答案似乎是错误的。我想输出“4.50”,但我继续得到“4.00”。是什么导致了这一点,我如何防止它。感谢部门不输出正确的答案C++

double INN = 0.0; 
INN = 9/2; 
std::cout.precision (3); 
std::cout << std::showpoint << INN << endl; 
+4

如果您执行整数除法,它会忽略派系部分。试试'9.0/2.0' – 2015-02-07 07:20:37

+0

为什么downvote? – 2015-02-07 07:22:30

+0

@RSahu,因为它之前一定要问过,在教科书中有清楚的解释 – saikumarm 2015-02-07 07:23:42

回答

2

INN = 9/2;将分配给4.0INN

将其替换为INN = 9.0/2.0;以指定4.5


说明:

因为无论92是整数,9/2总是导致的整数除法,其结果是一个整数太。因此,结果必须舍入,并向下舍入到最接近的整数。

鉴于9.02.0是双打,因此9.0/2.0将导致浮点除法,结果是一个double值。

+0

你不解释为什么会发生。 – 2015-02-07 07:23:51

+0

@NeilKirk添加了解释。 – emlai 2015-02-07 07:26:29

1

在声明中,INN=9/2; 9和2都是整数,因此称为/运算符的负载超过了两个整数,并且结果为整数。

从标准,

当整数分割,/运算的结果是 代数商与任何小数部分discarded.88)如果 商A/B表示的是,所述表达(a/b)* b + a%b应为 等于a。

这通常称为截断朝零。

要真正调用/运算符的浮点版本,必须将至少一个操作数强制转换为doublefloat

INN=(double)9/2;

这会给你4.5