尝试返回double,在C ++中获取整数

时间:2016-02-18 10:14:58

标签: c++

我正在尝试用C ++进行一个非常简单的计算

double area()
{
    return (base*height)/2;
}

其中baseheight的类型为int - 但我提供的baseheight55 (它们在文件的前面声明) - 我回来12,当我应该考虑12.5返回类型时返回double

我是否正确使用了回报,或者我应该尝试使用setprecision()或在返回前尝试施放?

5 个答案:

答案 0 :(得分:4)

由于baseheight2都是int(base*height)/2的结果也是int12此处),返回时将double投放到12.0

更改

return (base*height)/2;

return (base*height)/2.0;

(base*height)/2.0的结果为double,因为2.0是双倍的,您现在可以获得12.5

或者@Ajay指出,将baseheight投射到double以避免潜在的整数溢出。如,

return (static_cast<double>(base)*height)/2;

答案 1 :(得分:1)

你在这里执行整数除法,因为除法的两个参数都是整数。

之后的强制转换不会有帮助,但将其中一个参数转换为float / double会。

最简单的是写:

return (base*height)/2.;

(2之后的点使其成为双精度,这使得编译器选择浮点除法而不是整数除法)

答案 2 :(得分:1)

如果所有项都是int,则执行整数除法,并通过返回将结果(整数)强制转换为double。尝试使用2.0代替,或乘以0.5并避免分割。

答案 3 :(得分:1)

这样做:

double area()
{
    return ((double)base*height)/2;
}

<强>为什么吗 整个表达式为int,结果为int

double x  = 100/3;

您可能会33.0而不是33.33333。您需要至少将一个操作数设为double

  • 100.0 / 3
  • 100 / 3.0
  • double(100)/ 30
  • 30 / double(100)
  • 不是这个:(双倍)(100/3)

答案 4 :(得分:0)

显式类型转换

double area()
{
    return (base*height)/2.0;  //at least make any one of the operand double 

       //or   return (double(base*height))/2; external typecasting of base*height

      //or    return (double(base)*height)/2; external typecasting of base

}

简单注意: 当您定义函数时,您有责任返回指定数据类型中的值,否则编译器将执行隐式类型转换,这可能导致精度损失。

有关更多信息,请访问此链接:http://www.cprogramming.com/tutorial/c/lesson11.html