您观察的是整数截断的结果 .当使用两个整数操作数进行整数除法时,结果将是另一个整数,其中小数部分被丢弃.请注意,这与舍入不同,例如,截断3.8将变为3.
这将为您提供预期的输出:
double sum = ((117+130) / 3.0) + ((130+13) / 3.0);
Run Code Online (Sandbox Code Playgroud)
因为我们除以3.0而不是3.
即,如果整数除法中的至少一个或两个操作数都是浮点类型,则结果将是浮点数.(注意我在这里使用float/double在ints和截断方面有些可互换)
除了附加一个.或.0一个值(.0将生成一个double,同时.0f将生成一个float- 正如@ Morwenn在下面的有用评论所指出的那样),我们也可以明确地将整数转换为浮点数,但是当我们这样做时它很重要.一个简单的例子(注意,在这个例子中赋值float 之后的值在任何情况下v都是a float):
float v = 0;
/* values shown are BEFORE assignment */
v = (5 / 2); /* value is 2 due to integer truncation before assignment */
v = (float) (5 / 2); /* 2.0 as integer division occurs 1st, then cast to float */
v = (float) 5 / 2; /* 2.5 since 5 becomes 5.0 through casting first. */
Run Code Online (Sandbox Code Playgroud)
我从Division和浮点借用了上面的例子