个人总结第一天

1. Java中较长的long类型的变量(值大于int能够描述的最大数字)强制转换为int后,

值将先将long类型的“大数”转化为二进制,然后由低位到高位截取32位二进制数,再将这32位二进制数转化为int类型的“小数”。

同时注意,定义long型时,long a=213L;(注意最后的L)


2.字符串和数字相加问题

public class Test{
  public static void main(String[] args){
    long[] a1={1,2,4};
    System.out.print(a1[0] + a1[1] +a1[2] +" ");
    System.out.println(" " + a1[0] +a1[1] +a1[2]);
  }
}

相当于:

        System.out.print(new Long(a1[0] + a1[1] + a1[2]).toString() +" ");
        System.out.println(" "+new Long(a1[0]).toString() +new Long(a1[1]).toString()+new Long(a1[2]).toString() );

原因是如果你的数组是整形数据,也就是可以使用+做加法,而对于“”的转换,就是转换成一种字符串,字符串中的+是连接字符串的作用,明白了这个后,你就要看看你的运算是先做加法还是先转换为字符串,像(1)中的,你看看它是先做整形数字的加法,最后在强制转换为字符串,“”的作用其实跟toString()作用一样,(2)中的是先强制转换为字符串,这样连后面的整形也被强制装换为字符串类型了,+在字符串中只能做连接字符!


3.问题:

public class HelloWorld {

public static void main(String[] args) {
// TODO Auto-generated method stub
double a=456.68d;
int b=123;
System.out.println("c="+(a+b));
System.out.println("The result="+(123+456.58+"I`m lucky"));
}
}

结果:

c=579.6800000000001
The result=579.5799999999999I`m lucky

问题在于小数点后位数太多,不是确切的数。

这是double类型的缺点。这种运算时候需要使用
BigDecimal   b1   =   new   BigDecimal(Double.toString(v1));  
这个会让小数不出差错~

 在使用BigDecimal类来进行计算的时候,主要分为以下步骤:

              1、用float或者double变量构建BigDecimal对象。

             2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

             3、把BigDecimal对象转换成floatdoubleint等类型。


进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue()doubleValue()等方法。

 下面是一个工具类,该工具类提供加,减,乘,除运算。

public class Arith {
    /**
     * 提供精确加法计算的add方法
     * @param value1 被加数
     * @param value2 加数
     * @return 两个参数的和
     */
    public static double add(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();
    }
    
    /**
     * 提供精确减法运算的sub方法
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static double sub(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();
    }
    
    /**
     * 提供精确乘法运算的mul方法
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static double mul(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }
    
    /**
     * 提供精确的除法运算方法div
     * @param value1 被除数
     * @param value2 除数
     * @param scale 精确范围
     * @return 两个参数的商
     * @throws IllegalAccessException
     */
    public static double div(double value1,double value2,int scale) throws IllegalAccessException{
        //如果精确范围小于0,抛出异常信息
        if(scale<0){         
            throw new IllegalAccessException("精确度不能小于0");
        }
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.divide(b2, scale).doubleValue();    
    }
}


参考资料:http://blog.csdn.net/jackiehff/article/details/8582449

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值