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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值