【问题标题】:Why is the volume always calculated by zero?为什么体积总是以零计算?
【发布时间】:2021-03-05 09:22:53
【问题描述】:

我是使用函数的初学者,我编写了这个简单的代码。但是我不知道为什么音量总是被计算为零。

 #include <iostream>
 using namespace std;

 double area (double) ;
 double volume (double) ;
 int main () {
     double radious ;
     cout << "please enter the Radious \n" ;
     cin >> radious ;
     cout << "The area = " << area(radious) << "\n" ;
     cin >> radious ;
     cout << "The volume = " << volume(radious) << "\n" ;
     cout << radious << "\n" ;
 }

 // defintion function of the area 
 double area (double R) {
     return ( (4) * (3.14) * (R * R) ) ;
 }

 // defintion function of the volume 
 double volume (double R) {
     return ( (3/4) * (3.14) * (R * R * R) ) ;
 } 

【问题讨论】:

标签: c++ function dev-c++


【解决方案1】:

您的函数volume 将始终返回零,因为当解释为整数时,3 除以 4 为 0。这是因为将任何实数值转换为整数只会导致丢弃小数部分。例如,2.7 as int 将是 2 而不是 3,在数学意义上没有四舍五入。

您可以通过两种方式解决此问题:

A) 重新排列你的方程,这样除法将是你做的最后一个操作,例如((3.14*R*R*R*3)/4)。请注意,当您希望结果为 int 时,这通常是必要的,但此处并非如此。

B) 通过添加 .0 明确说明必须将 3 或 4 中的任何一个(或两者)视为实数 (float/double),例如3.0/43/4.03.0/4.0。这种方法在您的情况下更好,因为无论如何您都期望double

更多信息请参考Numeric conversionsthis FAQ

【讨论】:

  • "这是因为将任何实数值转换为整数只会导致丢弃小数部分。"不清楚,因为代码没有强制转换。建议重新措辞。
  • 例如,也可以使用static_cast&lt;double&gt;(3)/4
  • @NotAProgrammer 3.0/4 会简单得多,如答案中所述
  • @RemyLebeau 我认为无论如何这是一个品味问题,但由于 OP 是初学者,它可能会帮助他们知道这种方式也是可能的,例如当他们使用变量并且可以' t 修改文字。
【解决方案2】:

代码中的3/4 部分执行整数除法。整数不能有浮点数,所以通常整数的最后一部分被截断,在你的情况下留下0

您可以将3/4 替换为3.0/4.0 以使其正常工作。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多