1.奇偶性判断
问题:用以下方法判断参数是否为奇数可行吗?
public class IsOdd {
public static void main(String[] args) {
int i=11,j=-11;
System.out.println(i%2==1);
System.out.println(j%2==1);
}
}
注:以上方式对正整数没有任何问题,对负数则不合适
原因:
java对于取余运算符(%)的定义为:对于所有int数值a和所有非零int数值b,都满足如下恒等式:
(a / b) * b + (a % b) == a
当取余操作返回一个非零的结果时,它与左操作数具有相同的正负号,因此负整数模2的余数总数-1而非1.
解决方法:
1.一般常用方法:
i%2!=0
2.性能优化方法
(i&1)!=0
2.浮点数问题
问题:以下方式会得到精度为2的浮点数吗?
public static void main(String[] args) {
System.out.println(2.00-1.10);
}
原因:
1.1这个数字不能精确表达为一个double,更一般的说,并不是所有的小数可以用二进制浮点数表示。
解决方法:
1.使用int或long整型
2.使用精确小数预算的BigDecimal,注意BigDecimal要使用BigDecimal(String)而不是BigDecimal(double).
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")))