函数输出定义为double和int

时间:2016-02-24 05:59:13

标签: c int double output

int i = 5;
int j = 3;
int k;
double a, b;

k = j / 2 * i / 10;
a = 0.1 * i * j / 2.0;
b = 0.1 * (j / i) + 3.0;

因此,通过手动操作,可以得到k = 0.75,a = 0.75,b = 3.06。然而,当我在Visual Studio中解决它时,我得到0,0.75和3.00。我希望有人能说清楚这一点。我知道int意味着只能输出整个值,但为什么b = 3.00而不是3.06,因为b是双精度?

4 个答案:

答案 0 :(得分:2)

所有变量都应为double,因为如果它们是int,则会发生整数运算,结果将不包含小数位。

double i = 5;
double j = 3;
double k;
double a, b;

k = j / 2 * i / 10;
a = 0.1 * i * j / 2.0;
b = 0.1 * (j / i) + 3.0;

答案 1 :(得分:1)

在您的代码中,

  • ij属于int
  • 类型
  • 此处使用的整数常量也是int
  • 类型

所以,在

的情况下
k = j / 2 * i / 10;

将进行整数除法/乘法,并且 final 结果将提升以输入double。这不是你想要的。

或者

  • double用于ij
  • 使用强制转换来强制执行浮点运算。

以下情况中的(j / i)部分相同。

b = 0.1 * (j / i) + 3.0;

OTOH,如果是

a = 0.1 * i * j / 2.0;

给出正确的输出,因为常量0.12.0表示double类型,并且由于操作数的通常算术转换,执行浮点除法/乘法。 / p>

答案 2 :(得分:1)

基本数据类型的运算符返回其两个操作数的最强类型。

(j / i)是整数数据类型的一个分区,因为ij的类型为int。由于i初始化5j初始化3,因此除法的结果类型为int,结果值为0

要么像这样调整你的代码来获得你期望的重复:

b = 0.1 * ((double)j / i) + 3.0;
                 //  ^ this is now a floating point division

或者像这样:

b = 0.1 * j / i + 3.0;

请注意0.1 * j的结果类型属于double类型,因为0.1的类型为double

答案 3 :(得分:1)

由于ji是整数,j/i将产生整数0

整数除法仅给出商,余数被丢弃。 E.g 10/4 equals to 2