[Java]关于Java中的数值计算的简单总结

//假如转载,请注明出处.谢谢!
/*java中数值数据的范围
从计算机原理的角度来解释:
byte占8个字节的, 且是有符号整形,用二进制表示时候最高位为符号位0代表正数 1代表负数。
正数在计算机中是以原码形式存在的;负数在计算机中是以其补码形式存在的,就是负数的绝对值的原码转为二进制再按位取反后加1。
最大值:0 111 1111 = 127;即 +2^7-1(表示了128个数,最小的是0,最大的是127)
最小值:1 111 1111 = -128 即 -2^7  (表示了128个数,最大的是-1,最小的-128)
整数类型:byte、short、int、long
byte (字节类型)  8位 1字节[-2^7,2^7-1]  即[-128,127],默认是0
short(短整型)	16位 2字节[-2^15,2^15-1]即[-32768,32767],默认是0
int	 (整型)		32位 4字节[-2^31,2^31-1]即[-2147483648~2147483647],默认是0.最大值21.47亿,完全能满足日常的使用要求
long(长整型)    64位,8字节[-2^63,2^63-1]即[-9223372036854774808,9223372036854774807],默认是0L或0l(推荐用大写);
可以看到byte和short比较小,而long的取值范围太大,占用的空间多,所以int就可以满足日常计算。
通常,JAVA中出现了一个整数如35,就是int型的,如希望它是byte型的,可在数据后加上大写的 B:35B,表示它是byte型的,
35S表示short型,35L表示long型的,表示int我们可以什么都不用加。

以下是常数:
Byte.MAX_VALUE:		 127
Byte.MIX_VALUE:		-128
Short.MAX_VALUE:	 32767
Short.MIN_VALUE:	-32768
Integer.MAX_VALUE:	 2147483647
Integer.MIN_VALUE:	-2147483648
Long.MAX_VALUE:		 9223372036854775807
Long.MIN_VALUE:		-9223372036854775808
Double.MAX_VALUE:	 1.7976931348623157E308
Double.MIN_VALUE:	 4.9E-324
*/

//打印出各类型的最大值、最小值
public class java2{
	public static void main(String args[]){
	
		System.out.println("Byte.MAX_VALUE:"+Byte.MAX_VALUE);
		System.out.println("Byte.MIX_VALUE:"+Byte.MIN_VALUE);
		
		System.out.println("Short.MAX_VALUE:"+Short.MAX_VALUE);
		System.out.println("Short.MIN_VALUE:"+Short.MIN_VALUE);
		
		System.out.println("Integer.MAX_VALUE:"+Integer.MAX_VALUE);
		System.out.println("Integer.MIN_VALUE:"+Integer.MIN_VALUE);
				
		System.out.println("Long.MAX_VALUE:"+Long.MAX_VALUE);
		System.out.println("Long.MIN_VALUE:"+Long.MIN_VALUE);
		
		System.out.println("Double.MAX_VALUE:"+Double.MAX_VALUE);
		System.out.println("Double.MIN_VALUE:"+Double.MIN_VALUE);
	}
};

/*数值数据的溢出问题
当程序中没有做数据范围检查时,数据大小超出了可正常表示的范围时,这个数据的输出将发生紊乱,出现非预期结果。(数据溢出)
比如整型的最大值,假如再加1,则成为了最小值。解决的办法是改变数据类型,扩大数据的存储空间。
*/
public class DataDemo03{
	public static void main(String args[]){
		int max = Integer.MAX_VALUE ;		// 求出最大值
		System.out.println("整型的最大值:" + max) ;				//  2147483647	
		System.out.println("整型的最大值 + 1:" + (max + 1)) ;		// -2147483648
		System.out.println("整型的最大值 + 2:" + (max + 2)) ;		// -2147483647
		System.out.println("整型的最大值 + 2:" + ((long)max + 2)) ;//  2147483649
	}
};

/*一些数学运算方法:
Math类在java.lang包中,不需要导入,但随机数Random类要导入:import java.util.Random;
*/
import java.util.Random;
class java2{
	public static void main(String args[]){
		System.out.println("9的平方根" + Math.sqrt(9));
		System.out.println("9的5次方" + Math.pow(9,5));
		System.out.println("13,19谁大" + Math.max(13,19));
		System.out.println("13,19谁小" + Math.min(13,19));
		//四舍五入,只保留整数,假如要保留几位小数的,则使用另外的方法:
		System.out.println("33.5468四舍五入" + Math.round(33.5468));    
		
		//打出10个小于100的随机数
		Random r = new Random();
		for(int i=1; i<=10; i++)
			System.out.print(r.nextInt(100) + "\t");
	}
}

/*数字的显示格式
NumberFormat、MessageFormat、DateFormat都是Format的三个常用子类
NumberFormat只是根据系统设置区域的不同固定地去显示数字的格式,
DecimalFormat可以根据自己的喜好来任意显示格式。
*/
import java.text.* ;
class FormatDemo{
	public void format1(String pattern,double value){	// 此方法专门用于完成数字的格式化显示
		DecimalFormat df = null ;			// 声明一个DecimalFormat类的对象
		df = new DecimalFormat(pattern) ;	// 实例化对象,传入模板
		String str = df.format(value) ;		// 格式化数字
		System.out.println("使用" + pattern + "格式化数字" + value + ":" + str) ;
	}
};
public class java2{
	public static void main(String args[]){
		
		//NumberFormat只是根据系统设置区域的不同固定地去显示数字的格式,
		NumberFormat nf = null ;		// 声明一个NumberFormat对象
		nf = NumberFormat.getInstance() ;	// 得到默认的数字格式化显示
		System.out.println("格式化之后的数字:" + nf.format(10000000)) ;
		System.out.println("格式化之后的数字:" + nf.format(1000.345)) ;
		
		//DecimalFormat可以根据自己的喜好来任意显示格式。
		FormatDemo demo = new FormatDemo() ;	// 格式化对象的类
		demo.format1("###,###.###",111222.34567) ;
		demo.format1("000,000.000",11222.34567) ;
		demo.format1("###,###.###¥",111222.34567) ;
		demo.format1("000,000.000¥",11222.34567) ;
		demo.format1("##.###%",0.345678) ;
		demo.format1("00.###%",0.0345678) ;
		demo.format1("###.###\u2030",0.345678) ;
	}
};

//大数整数的计算
import java.math.BigInteger ;
public class java2{
	public static void main(String args[]){
		BigInteger bi1 = new BigInteger("123456789") ;	// 声明BigInteger对象
		BigInteger bi2 = new BigInteger("987654321") ;	// 声明BigInteger对象
		System.out.println("加法操作:" + bi2.add(bi1)) ;	// 加法操作
		System.out.println("减法操作:" + bi2.subtract(bi1)) ;	// 减法操作
		System.out.println("乘法操作:" + bi2.multiply(bi1)) ;	// 乘法操作
		System.out.println("除法操作:" + bi2.divide(bi1)) ;	// 除法操作,保留了商的整数部分
		System.out.println("最大数:" + bi2.max(bi1)) ;	 // 求出最大数
		System.out.println("最小数:" + bi2.min(bi1)) ;	 // 求出最小数
		BigInteger result[] = bi2.divideAndRemainder(bi1) ;	// 求出余数的除法操作
		System.out.println("商是:" + result[0] + ";余数是:" + result[1]) ;
	}
};
/*大数的小数操作及可以准确地进行四舍五入:BigDecimal
求到商的小数部分
*/
import java.math.* ;
class MyMath{
	public static double add(double d1,double d2){		// 进行加法计算
		BigDecimal b1 = new BigDecimal(d1) ;
		BigDecimal b2 = new BigDecimal(d2) ;
		return b1.add(b2).doubleValue() ;
	}
	public static double sub(double d1,double d2){		// 进行减法计算
		BigDecimal b1 = new BigDecimal(d1) ;
		BigDecimal b2 = new BigDecimal(d2) ;
		return b1.subtract(b2).doubleValue() ;
	}
	public static double mul(double d1,double d2){		// 进行乘法计算
		BigDecimal b1 = new BigDecimal(d1) ;
		BigDecimal b2 = new BigDecimal(d2) ;
		return b1.multiply(b2).doubleValue() ;
	}
	public static double div(double d1,double d2,int len){		// 进行乘法计算
		BigDecimal b1 = new BigDecimal(d1) ;
		BigDecimal b2 = new BigDecimal(d2) ;
		return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue() ;
	}
	public static double round(double d,int len){	// 进行四舍五入
		BigDecimal b1 = new BigDecimal(d) ;
		BigDecimal b2 = new BigDecimal(1) ;
		return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue() ;
	}
};

public class BigDecimalDemo01{
	public static void main(String args[]){
		System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345,3.333),1)) ;
		System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345,3.333),3)) ;
		System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345,3.333),2)) ;
		System.out.println("除法运算:" + MyMath.div(10.345,3.333,3)) ;
	}
};

发布了15 篇原创文章 · 获赞 1 · 访问量 4137

猜你喜欢

转载自blog.csdn.net/jsqdsq/article/details/78150123