我是新来的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;
我是新来的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;
INN = 9/2;
将分配给4.0
INN
。
将其替换为INN = 9.0/2.0;
以指定4.5
。
说明:
因为无论9
和2
是整数,9/2
总是导致的整数除法,其结果是一个整数太。因此,结果必须舍入,并向下舍入到最接近的整数。
鉴于9.0
和2.0
是双打,因此9.0/2.0
将导致浮点除法,结果是一个double值。
你不解释为什么会发生。 – 2015-02-07 07:23:51
@NeilKirk添加了解释。 – emlai 2015-02-07 07:26:29
在声明中,INN=9/2;
9和2都是整数,因此称为/
运算符的负载超过了两个整数,并且结果为整数。
从标准,
当整数分割,/运算的结果是 代数商与任何小数部分discarded.88)如果 商A/B表示的是,所述表达(a/b)* b + a%b应为 等于a。
这通常称为截断朝零。
要真正调用/
运算符的浮点版本,必须将至少一个操作数强制转换为double
或float
。
INN=(double)9/2;
这会给你4.5
。
如果您执行整数除法,它会忽略派系部分。试试'9.0/2.0' – 2015-02-07 07:20:37
为什么downvote? – 2015-02-07 07:22:30
@RSahu,因为它之前一定要问过,在教科书中有清楚的解释 – saikumarm 2015-02-07 07:23:42