运算符概要
- 在Java中,使用算术运算符+,-,*,/表示加减乘除运算,当参与/的运算的两个操作数都是整数时,表示整数除法,否则,表示浮点除法.整数的求余操作(有时称为取模),用%表示,例如,
15/2
,15%2
,15.0/2
. - 需要注意的是,整数被0除将产生一个异常,而浮点数被0除会得到无穷大或NaN结果.
数学函数
- 在Math类中,包含各种各样的数学函数,在编写不同类别的程序时,可能需要的函数也不同.
- 要想计算一个数值的平方根,可以使用sqrt方法
double x = 4;
double y = Math.sqrt(x);
System.out.println(y); // 2
- 在Java中,没有幂运算,因此需要借助于Math类的pow方法,语句
double y = Math.pow(x,a);
将y的值设置为x的a次幂.pow方法有两个double类型的参数,其返回结果也是double类型. - floorMod方法的存在是解决一个长期存在的有关整数余数的问题,考虑表达式n
%2
,如果n为偶数,这个表达式为0,如果n为奇数,表达式则为1,当然,除非n是负数.如果n为负,这个表达式则为-1,但是,欧几里得规则中描述:余数总是要大于等于0.因为我们要归一化一个的数,因此采用floorMod方法,该方法总会得到大于0的数.例如:floorMod(position+adjustment,12)
,产生0~11之间的数.但是对于负除数,floorMod会得到负数结果,不过这种情况在实际中很少出现. - Math类提供了一系列的三角函数
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
- 还有指数以及它的反函数-自然对数以及以10为底的对数
Math.exp
Math.log
Math.log10
- 最后Java还提供了表示π和e常量的近似值
Math.pi
Math.E
数值类型之间的转换
隐式类型转换
- 经常需要将一种数值类型转换为另一种数值类型.
- 实心箭头表示无信息丢失的转换,虚箭头表示可能有精度损失的转换.
- 当使用两个数值进行二元操作时,例如(n+f,n是整数,f是浮点数),先要将操作数转化为同一类型,然后进行计算.
- 如果两个操作数有一个是double类型,另一个操作数就转换为double类型.
- 否则,如果一个操作数是float类型,另一个操作数会转换为float类型.
- 否则,如果一个操作数是long类型,另一个会转换为long类型.
- 否则,两个操作数都会转化为int类型.
强制类型转换
- 在必要的时候,需要将double类型转换为int类型,在Java中允许进行这种数值之间的类型转换,当然有可能丢失一些信息.在这种情况下,需要通过强制类型转换进行实现,强制类型转换的语法是在圆括号中给出想要转换的类型,后面紧跟的是待转换的变量名.例如
double x=9.997;
int nx=(int)x;
这时,变量nx的值为9,强制类型转换通过截断小数部分将浮点值转换为整型.
- 如果对浮点数进行舍入计算,以便得到最接近的整数.那就使用Math.round方法.
double x=9.997;
int nx=(int)Math.round(x);
这时,nx的值为10,当调用round函数时,仍然需要进行强制类型转换,其原因是round方法返回的是long类型,由于存在信息丢失的可能性,所以只能采用显式的强制类型转换才能将long转换为int.