C计算2个数字的比率

新手上路,请多包涵

大家好,我对编程和通过 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';

这适用于等于整数比率(例如 100 和 25)的数字,但是尽管我将变量“比率”设置为双精度,但在非整数比率的情况下,它会从答案中删除任何小数。谁能告诉我哪里出错了?

原文由 Leonjwolf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 855
2 个回答

整数 时,结果为 _整数_(使用整数算术):

 11 / 2 == 5
11 % 2 == 1 /* remainder */

并且当除以 浮点 值时,结果也是 _浮点数_:

 11.0 / 2 == 5.5
11 / 2.0 == 5.5
((double) 11) / 2 == 5.5

在你的情况下

 double ratio = (val2 / val1);

你有一个 _整数除法_,只有在执行 disvison 之后,它的结果才会被强制转换为 double 。您可以将 val2val1 声明为 double

 double val1;
double val2;

比率的至少一个参数转换为 double

 double ratio = ((double)val2) / val1;

原文由 Dmitry Bychenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

结果类型是 double 的事实是否在整数类型上执行原始除法(截断小数部分)并不重要。

所以要解决你的问题,要么:

  • 对输入数字也使用浮点类型
  • 在除法之前将其中一个数字转换为浮点类型

原文由 Bartek Banachewicz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏