【问题标题】:Integer division always zero [duplicate]整数除法总是零[重复]
【发布时间】:2012-03-16 08:24:50
【问题描述】:

可能重复:
C programming division

可能我的问题非常简单和愚蠢。 我想存储一个部门的价值,特别是1 / x 其中x 是 整数值。

int x = 17;
double result = 1/x;

我尝试这样做,但总是得到0.000000 ... 我尝试输入固定在 x 中的值,例如 1/17,但总是得到相同的值.. 有什么问题?

【问题讨论】:

标签: c++ visual-studio math floating-point double


【解决方案1】:

你正在做整数除法。

尝试以下方法,它会按预期工作:

int x = 17;
double result = 1.0 / x;

你上面的表达式中1的类型是intx的类型是int。当您执行 int / int 时,您会得到一个 int 回复。您至少需要其中一种类型为浮点(floatdouble)才能进行浮点除法。

与数学不同,C++ 中的除法可以指截断整数除法(您所做的)或浮点除法(我在示例中所做的)。小心这个!

在我的示例中,明确地我们拥有的是double / int -> double

【讨论】:

  • 或者说清楚:double result = (double)1 / x;
  • @Nobody 所以你的意思是double result = 1.0 / x;?好吧,编译器会为您执行此操作,但他可能会因为您自己不识别双重文字而嘲笑您。
  • @Christian Rau 这更像是一个使自动类型更加可见的教学示例。当然,作为一名程序员,我总是会写1.0,因为它要短得多。
  • 对于 POD 类型,所有数学运算都是在相同类型的参数上完成的。结果类型与输入参数相同。如果输入参数没有匹配的类型,那么一个参数将被提升为另一个参数的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2016-11-06
  • 1970-01-01
  • 2017-04-14
  • 2013-10-30
  • 2015-02-21
  • 2016-02-08
相关资源
最近更新 更多