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是双精度?
答案 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)
在您的代码中,
i
和j
属于int
int
,所以,在
的情况下k = j / 2 * i / 10;
将进行整数除法/乘法,并且 final 结果将提升以输入double
。这不是你想要的。
或者
double
用于i
和j
以下情况中的(j / i)
部分相同。
b = 0.1 * (j / i) + 3.0;
OTOH,如果是
a = 0.1 * i * j / 2.0;
给出正确的输出,因为常量0.1
或2.0
表示double
类型,并且由于操作数的通常算术转换,执行浮点除法/乘法。 / p>
答案 2 :(得分:1)
基本数据类型的运算符返回其两个操作数的最强类型。
(j / i)
是整数数据类型的一个分区,因为i
和j
的类型为int
。由于i
初始化5
,j
初始化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)
由于j
和i
是整数,j/i
将产生整数0
。
整数除法仅给出商,余数被丢弃。 E.g 10/4 equals to 2