2.Java数学运算

1.数值变量

1.1变量类型

  1. byte:字节型
  2. short:短整型
  3. int:整形
  4. long:长整形
  5. float:浮点型(用来表示小数)
  6. double:双精度形

声明语句的格式为:“变量类型 变量名称 = 具体的数值;”
看一个声明数值变量代码的例子

	public static void main(String[] args) {
		int zhumulanma; // 先声明变量
		// 8844是2005年中国测量得到的珠穆朗玛峰岩面高度,8848是冰雪高度
		zhumulanma = 8844; // 再对变量赋值
		System.out.println("珠穆朗玛峰的高度=" + zhumulanma);
		double yuanzhoulv = 3.1415926; // 在声明变量之时就初始化赋值
		System.out.println("圆周率=" + yuanzhoulv);
	}

1.2特殊数字的表达

  • 二进制:以0B或者0b开头,后面的数字只能是0或者1
  • 八进制:以0开头,后面数字是0-7
  • 十六进制:以0x或者0X开头,后面数字可以0-9,a-f
  • 各种进制赋值代码如下
public static void main(String[] args) {
		int binary = 0b11; // 二进制数,0b也可以写成0B
		System.out.println("binary=" + binary);
		int octonary = 011; // 以0开头,后面非bB非xX的就是八进制数
		System.out.println("octonary=" + octonary);
		int hexadecimal = 0x11; // 十六进制数,0x也可以写成0X
		System.out.println("hexadecimal=" + hexadecimal);
		int hexLetter = 0xff; // 十六进制数不区分大小写,如ff也可以写成FF
		System.out.println("hexadecimal=" + hexLetter);
		int decimal = 11; // 没有任何前缀,则默认为十进制数
		System.out.println("decimal=" + decimal);
	}

输出如下,可见将各种进制都转换为十进制输出
在这里插入图片描述

1.3强制类型转换

在编码过程中,不但能将某个数字赋值给某个变量,还需要将一个变量赋值给另一个变量,示例如下:

public static void main(String[] args) {
		int changjiang = 6397; // 长江的长度为6397千米
		System.out.println("changjiang=" + changjiang);
		int longRiver = changjiang; // 把一个整型变量赋值给另一个整型变量
		System.out.println("longRiver=" + longRiver);
		
//		long changjiang = 6397;
//		// 若把长整型变量直接赋值给整型变量,编译器会提示错误
//		//int longRiver = changjiang; // 把长整型变量赋值给整型变量,注意编译器会报错
//		// 不同类型的变量相互赋值,需要在原变量前面添加“(新类型)”表示强制转换类型
//		int longRiver = (int) changjiang; // 把长整型数强制转成整型数
		
		long worldPopulation = 7444443881L; // 截至2018年元旦,世界人口大约有74亿
		System.out.println("worldPopulation=" + worldPopulation);
		// 把长整型数赋值给整型数会丢失前四个字节
		int shijierenkou = (int) worldPopulation; // 把长整型数强制转成整型数
		System.out.println("shijierenkou=" + shijierenkou);
		
		// 3.1415926是中国古代数学家祖冲之求得的圆周率数值,又称祖率
		double zulv = 3.1415926;
		System.out.println("zulv=" + zulv);
		// 把双精度数赋值给浮点数会丢失数值精度
		float pai = (float) zulv; // 把双精度数强制转成浮点数
		System.out.println("pai=" + pai);
		double jiage = 9.9; // 某商品定价为9.9元
		System.out.println("jiage=" + jiage);
		// 把小数赋值给整型变量,会直接去掉小数点后面部分,不会四舍五入
		int price = (int) jiage; // 把双精度数强制转成整型数
		System.out.println("price=" + price);
	}

输出如下:
changjiang=6397
longRiver=6397
worldPopulation=7444443881
shijierenkou=-1145490711
zulv=3.1415926
pai=3.1415925
jiage=9.9
price=9

可见,相同变量之间互相赋值完全没有问题,如果是把长整形赋值给整形变会报错,高精度赋值给低精度会导致字节丢失。

2.算术运算

2.1四则运算

加法:+
减法: -
乘法:*
除法 :/
取余 :%
简单示例:

ublic static void main(String[] args) {
		int sum = 1 + 2; // 求两数相加之和
		System.out.println("sum=" + sum);
		int differ = 7 - 3; // 求两数相减之差
		System.out.println("differ=" + differ);
		int product = 5 * 6; // 求两数相乘之积
		System.out.println("product=" + product);
		int quotient = 81 / 9; // 求两数相除之商
		System.out.println("quotient=" + quotient);
		int remainder = 40 % 3; // 求两数相除之余数
		System.out.println("remainder=" + remainder);
		// 被除数和除数都是整数,则求得的商为去掉小数部分的整数
		int quotientInt = 25 / 4;
		System.out.println("quotientInt=" + quotientInt);
		// 被除数和除数只要有一个是浮点或双精度数,则求得的商保留小数部分
		double quotientDouble = 25.0 / 4; // 25/4.0的运算结果跟25.0/4是一样的
		System.out.println("quotientDouble=" + quotientDouble);
		// 因float和double类型为约数表示,故相除得到的商也是约数,不能保证小数部分是精确的
		double quotientDecimal = 8.1 / 3;
		System.out.println("quotientDecimal=" + quotientDecimal);
		// 对浮点数和双精度数求余数,也存在约数造成的问题,即余数的小数部分可能并不准确
		double remainderDecimal = 5.1 % 2;
		System.out.println("remainderDecimal=" + remainderDecimal);
	}

运行结果:
sum=3
differ=4
product=30
quotient=9
remainder=1
quotientInt=6
quotientDouble=6.25
quotientDecimal=2.6999999999999997
remainderDecimal=1.0999999999999996

2.2 一元运算符

简单举例:要注意JAVA不存在自乘(**)和自除(//)的运算

  • x=x+7可以写成:x+=7
  • x=x+1可以写成:x+=1或者x++

2.3数学函数

2.2.1 取整函数

public static void main(String[] args) {
		double decimalPositive = 9.9;
		// 注意下面的9.4999999999999999,取整之后会变成10。
		// 这是因为9.4999999999999999超出了双精度数的精度范围,Java会先将其转为近似9.5的小数,再进行取整操作
		long roundPositive = Math.round(decimalPositive); // 四舍五入
		double floorPositive = Math.floor(decimalPositive); // 往下取整,也就是往数值小的方向取整
		double ceilPositive = Math.ceil(decimalPositive); // 往上取整,也就是往数值大的方向取整
		double decimalNegative = -9.9;
		long roundNegative = Math.round(decimalNegative); // 四舍五入
		double floorNegative = Math.floor(decimalNegative); // 往下取整,也就是往数值小的方向取整
		double ceilNegative = Math.ceil(decimalNegative); // 往上取整,也就是往数值大的方向取整
		double absoluteValue = Math.abs(decimalNegative); // 取绝对值
	}

2.2.2 取随机数

概率统计经常用到随机数,但是random函数只能生成小于1的随机小数(包括0和1),但是引入Random随机数工具,实例化之后nextFloat可以生成float类型随机浮点小数,nextDouble生成double类型随机双精度小数等等,放一个简单示例:

public static void main(String[] args) {
		double decimal = Math.random(); // 生成小于一的随机小数(包括0和正小数)
		int integer = new Random().nextInt(); // 生成随机整数(包括负数)
		long long_integer = new Random().nextLong(); // 生成随机长整数(包括负数)
		float float_decimal = new Random().nextFloat(); // 生成随机的浮点小数(不包括负数)
		double double_decimal = new Random().nextDouble(); // 生成随机的双精度小数(不包括负数)
		int hundred = new Random().nextInt(100); // 生成一百以内的随机整数(0≤随机整数<100,即包括0但不包括100)
	}

2.3.3 科学计算函数

如开方,幂运算,求对数等等,一段代码走起~

public static void main(String[] args) {
		double nine = 9;
		double sqrt = Math.sqrt(nine); // 开平方。对应数学符号√ ̄
		// 求n次方。pow的第一个参数为幂运算的底数,第二个参数为幂运算的指数
		double pow = Math.pow(nine, 2);
		double five = 5;
		double exp = Math.exp(five); // 求自然常数e的n次方
		double log = Math.log(exp); // 求自然对数,为exp方法的逆运算。对应数学函数lnN
		double log10 = Math.log10(100); // 求底数为10的对数。对应数学函数logN
	}

2.3.4 三角函数

Math库还提供了几何方面的三角函数运算,包括正弦,余弦,正切,反正弦,反余弦,反正切等等,但是Math库三角函数用法不同,使用弧度制而不是角度制,来段代码清晰明了:

public static void main(String[] args) {
		double angle = 60; // 三角函数的角度
		// 弧度=该角度对应的弧长/半径。数学函数库Math专门提供了常量PI表示圆周率π的粗略值
		double radian = angle * Math.PI / 180;
		double sin = Math.sin(radian); // 求某弧度的正弦。求反正弦要调用asin方法
		double cos = Math.cos(radian); // 求某弧度的余弦。求反余弦要调用acos方法
		double tan = Math.tan(radian); // 求某弧度的正切。求反正切要调用atan方法
		// 求某弧度的余切。Math库未提供求余切值的方法,其实余切值就是正切值的倒数
		double ctan = 1.0 / tan;
	}

总结

  1. 学会不同类型的数值变量的赋值以及强制类型转换
  2. 学会简单数学运算用Java实现
  3. 学会调用数学函数库的常用函数
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值