首页 > 代码库 > 【java解惑】长整数计算防止溢出

【java解惑】长整数计算防止溢出


    如下代码:

public class Example003 {

	public static void main(String[] args) {
		final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
		final long MICROS_PER_DAY_L1 = 24 * 60 * 60 * 1000 * 1000L;
		final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
		System.out.println("NO L Print:" + MICROS_PER_DAY / MILLIS_PER_DAY); //输出1
		System.out.println("Has L Print:" +MICROS_PER_DAY_L1 / MILLIS_PER_DAY); //输出2
	}
}

    输出结果:

NO L Print:5
Has L Print:1000


    原因分析:

    输出1和2的结果不一致的原因是计算溢出。由于MICROS_PER_DAY中所有乘起来的因子都是int,当两个int相乘时得到的结果也是int,所以MICROS_PER_DAY的计算结果是int,计算完成后(溢出)再赋值给long类型的MICROS_PER_DAY,MICROS_PER_DAY获取的是一个溢出后部分值;MICROS_PER_DAY_L1被当做一个long类型计算,计算的结果也是long,不产生溢出。所以,在操作大数字时,一定是注意溢出问题。一般在计算时,就使用long来执行。也就是在计算的因子中显式地标准数字类型。




本文出自 “winger” 博客,谢绝转载!

【java解惑】长整数计算防止溢出