我是c +的新手,我正在尝试制作一个基本的数学程序,以便热身语言。当我尝试做问题9/2或任何带小数的答案时,答案似乎是错误的。我想输出“4.50”,但我继续得到“4.00”。是什么导致这种情况以及如何防止它。感谢
double INN = 0.0;
INN = 9 / 2;
std::cout.precision (3);
std::cout << std::showpoint << INN << endl;
答案 0 :(得分:2)
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
将导致浮点除法,从而产生双倍值。
答案 1 :(得分:1)
在语句中,INN=9/2;
9和2都是整数,因此调用带有两个整数的/
运算符的重载,结果为整数。
从标准,
当整数被分割时,/运算符的结果是 任何小数部分丢弃的代数商.88)如果 商a / b是可表示的,表达式(a / b)* b + a%b应为 等于a。
这通常被称为截断为零。
要实际调用/
运算符的浮点版本,必须将至少一个操作数强制转换为double
或float
。
INN=(double)9/2;
这将为您提供4.5
。