0 c++
大家好,我对编程还很陌生,正在学习 Stroustrup 的“使用 C++ 进行编程、原理和实践”,在第 3 章末尾我完全陷入停滞状态,并进行了一项要求您编写一段代码的练习它会进行一些涉及 2 个数字的计算,其中包括计算数字的比率。不幸的是,这本书根本没有涵盖这一点,我正在费尽心思地试图自己弄清楚,只能找到代码示例来为我的小脑袋进阶。
我现在的代码是:
double ratio;
if (val2 > val1)
ratio = (val2 / val1);
if (val2 < val1)
ratio = (val1 / val2);
cout << "The ratio of " << val1 << " and " << val2 << " is 1:" << ratio << '\n';
Run Code Online (Sandbox Code Playgroud)
这对于等于整数比率(例如 100 和 25)的数字效果很好,但是尽管我将变量“比率”设置为双精度,但在非整数比率的情况下,它会从答案中删除任何小数。谁能告诉我哪里错了?
整数相除的结果是整数(使用整数算术):
11 / 2 == 5
11 % 2 == 1 /* remainder */
Run Code Online (Sandbox Code Playgroud)
当除以浮点值时,结果也是浮点:
11.0 / 2 == 5.5
11 / 2.0 == 5.5
((double) 11) / 2 == 5.5
Run Code Online (Sandbox Code Playgroud)
在你的情况下
double ratio = (val2 / val1);
Run Code Online (Sandbox Code Playgroud)
您有一个整数除法,并且只有在执行除法之后,它的结果才会被转换为double. 您可以将val2和声明val1为double:
double val1;
double val2;
Run Code Online (Sandbox Code Playgroud)
或将该比率的至少一个参数转换为double:
double ratio = ((double)val2) / val1;
Run Code Online (Sandbox Code Playgroud)