为什么 % 向上舍入
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
被评估。 2
和15
都是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。
所以今天在学校,我们在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
被评估。2
和15
都是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。