java解惑(一)—表达式之谜

来源:互联网 发布:淘宝生意参谋标准版 编辑:程序博客网 时间:2024/04/19 08:20

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")))
0 0
原创粉丝点击