为什么 % 向上舍入

Why does % round up

所以今天在学校,我们在java学习了一些数学类,但我不是特别明白为什么它会自动从-11.87舍入到-12。

import java.util.*;
public class println{
    public static void main (String [] args){

        System.out.println(8 % 3 / 15 - 12);

    }
}

这是因为您在表达式中提供的所有数字都是非浮点数形式。因此,JVM 不会处理带有浮点数的表达式。

8 % 3 = 2
2 / 15 = 0
0 - 12 = -12

由于 none 个数字是浮点数(例如双精度数),因此操作实际上是这样进行的。

它没有"round up"。这里完成的步骤非常简单:

  • 8%3 被评估。模运算符 % returns 其余的 integer-division 8/3(所以它 returns 2)
  • 2 / 15 被评估。 215都是java中的整数(int)。整数除法将切断所有小数位。所以这个表达式将被评估为 0!
  • 0 - 12 被评估。结果是 -12

你的表达是这样的:

  System.out.println(((8 % 3) / 15) - 12);

首次评价

 (8 % 3) = 2 

 (2/15) = 0

最后

 0-12 =-12

为了理解这一点,你应该了解Java中integer和double的结构。例如,如果您这样编码,它不会 "round up".

public class println {
public static void main(String[] args) {

    System.out.println(8.0 % 3.0 / 15.0 - 12.0);

}}

因为,您使用的数字是整数(没有小数点)。如果以双精度形式给出数字,程序会给出准确的结果,即 -11.866666666666667。