JAVA(12)数字

Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等
Math 类位于 java.lang 包
静态常量 Math 类中包含 E 和 PI 两个静态常量,其中 E 用于记录 e 的常量,而 PI 用于记录圆周率的值。
System.out.println("E常量的值:"+ Math.E); System.out.println("PI常量的值:"+ Math.PI);

输出:
E 常量的值:2.718281828459045
PI 常量的值:3.141592653589793
最大值、最小值、绝对值
方法 说明
static int abs(int a) 返回 a 的绝对值
static long abs(long a) 返回 a 的绝对值
static float abs(float a) 返回 a 的绝对值
static double abs(double a) 返回 a 的绝对值
static int max(int x,int y) 返回 x 和 y 中的最大值
static double max(double x,double y) 返回 x 和 y 中的最大值
static long max(long x,long y) 返回 x 和 y 中的最大值
static float max(float x,float y) 返回 x 和 y 中的最大值
static int min(int x,int y) 返回 x 和 y 中的最小值
static long min(long x,long y) 返回 x 和 y 中的最小值
static double min(double x,double y) 返回 x 和 y 中的最小值
static float min(float x,float y) 返回 x 和 y 中的最小值
package com.day01; public class TelPhone { public static void main(String[] args) { System.out.println("10和20的较大值:" + Math.max(10, 20)); System.out.println("12.5和12的较小值" + Math.min(12, 12.5)); System.out.println("-10的绝对值" + Math.abs(-10)); } }

输出:
10和20的较大值:20
12.5和12的较小值12.0
-10的绝对值10
求整运算
方法 说明
static double ceil(double a) 返回大于或等于 a 的最小整数
static double floor(double a) 返回小于或等于 a 的最大整数
static double rint(double a) 返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数
static int round(float a) 将参数加上 1/2 后返回与参数最近的整数
static long round(double a) 将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型
import java.util.Scanner; public class Test03 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.outprintln("请输入一个数字:"); double num=input.nextDouble(); System.out.println("大于或等于 "+num+" 的最小整数:"+Math.ceil(num)); System.out.println("小于或等于 "+num+" 的最大整数:"+Math.floor(num)); System.out.println("将 "+num+" 加上 0.5 之后最接近的整数:"+Math.round(num)); System.out.println("最接近 "+num+" 的整数:"+Math.rint(num)); } }

三角函数运算
方法 说明
static double sin(double a) 返回角的三角正弦值,参数以孤度为单位
static double cos(double a) 返回角的三角余弦值,参数以孤度为单位
static double asin(double a) 返回一个值的反正弦值,参数域在 [-1,1],值域在 [-PI/2,PI/2]
static double acos(double a) 返回一个值的反余弦值,参数域在 [-1,1],值域在 [0.0,PI]
static double tan(double a) 返回角的三角正切值,参数以弧度为单位
static double atan(double a) 返回一个值的反正切值,值域在 [-PI/2,PI/2]
static double toDegrees(double angrad) 将用孤度表示的角转换为近似相等的用角度表示的角
staticdouble toRadians(double angdeg) 将用角度表示的角转换为近似相等的用弧度表示的角
public class Test04 { public static void main(String[] args) { System.out.println{"90 度的正弦值:"+Math.sin(Math.PI/2)); System.out.println("0 度的余弦值:"+Math.cos(0)); System.out.println("1 的反正切值:"+Math.atan(l)); System.out.println("120 度的弧度值:"+Math.toRadians(120.0)); } }

指数运算 指数的运算包括求方根、取对数及其求 n 次方的运算。
方法 说明
static double exp(double a) 返回 e 的 a 次幂
static double pow(double a,double b) 返回以 a 为底数,以 b 为指数的幂值
static double sqrt(double a) 返回 a 的平方根
static double cbrt(double a) 返回 a 的立方根
static double log(double a) 返回 a 的自然对数,即 lna 的值
static double log10(double a) 返回以 10 为底 a 的对数
public class Test05 { public static void main(String[] args) { System.out.println("4 的立方值:"+Math.pow(4, 3)); System.out.println("16 的平方根:"+Math.sqrt(16)); System.out.println("10 为底 2 的对数:"+Math.log1O(2)); } }

生成随机数(random()和random类)
方法 说明
boolean nextBoolean() 生成一个随机的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一个随机的 double 值,数值介于[0,1.0),含 0 而不包含 1.0
int nextlnt() 生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果需要生成指定区间的 int 值,则需要进行一定的数学变换
int nextlnt(int n) 生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成指定区间的 int 值,也需要进行一定的数学变换
void setSeed(long seed) 重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象和相同种子数使用 new 关键字创建出的 Random 对象相同
long nextLong() 返回一个随机长整型数字
boolean nextBoolean() 返回一个随机布尔型值
float nextFloat() 返回一个随机浮点型数字
double nextDouble() 返回一个随机双精度值
格式化数据 DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。DecimalFormat 类包含一个模式和一组符号
符号 说明
0 显示数字,如果位数不够则补 0
# 显示数字,如果位数不够不发生变化
. 小数分隔符
- 减号
, 组分隔符
E 分隔科学记数法中的尾数和小数
% 前缀或后缀,乘以 100 后作为百分比显示
? 乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符
import java.text.DecimalFormat; import java.util.Scanner; public class Test { public static void main (String[] args) { //实例化DecimalFormat类的对象,并指定格式 DecimalFormat df1 = new DecimalFormat("0.0"); DecimalFormat df2 = new DecimalFormat("#.#"); DecimalFormat df3 = new DecimalFormat("000.000"); DecimalFormat df4 = new DecimalFormat("###.###"); Scanner scan = new Scanner(System.in); System.out.println("请输入一个float类型的数字:"); float f = scan.nextFloat(); //对输入的数字应用格式,并输出结果 System.out.println("0.0格式:"+ df1.format(f)); System.out.println("#.#格式:"+ df2.format(f)); System.out.println("000.000格式:"+ df3.format(f)); System.out.println("###.###格式:"+ df4.format(f)); } }

大数字运算(BigInteger类和BigDecimal类)
  • BigInteger 类来处理比 Integer 更大的数字
  • BigInteger 支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值。
  • 要使用 BigInteger 类,首先要创建一个 BigInteger 对象。
  • 最直接的一种是参数以字符串形式代表要处理的数字
语法:
  • BigInteger(String val)
  • BigInteger bi=new BigInteger("5")
  • 这里数字 5 的双引号是必需的,因为 BigInteger 类构造方法要求参数是字符串类型。
方法名称 说明
add(BigInteger val) 做加法运算
subtract(BigInteger val) 做减法运算
multiply(BigInteger val) 做乘法运算
divide(BigInteger val) 做除法运算
remainder(BigInteger val) 做取余数运算
divideAndRemainder(BigInteger val) 做除法运算,返回数组的第一个值为商,第二个值为余数
pow(int exponent) 做参数的 exponent 次方运算
negate() 取相反数
shiftLeft(int n) 将数字左移 n 位,如果 n 为负数,则做右移操作
shiftRight(int n) 将数字右移 n 位,如果 n 为负数,则做左移操作
and(BigInteger val) 做与运算
or(BigInteger val) 做或运算
compareTo(BigInteger val) 做数字的比较运算
equals(Object obj) 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false
min(BigInteger val) 返回较小的数值
max(BigInteger val) 返回较大的数值
package com.day01; import java.math.BigInteger; import java.util.Scanner; public class testDemo { public static void main (String[] args) { Scanner input = new Scanner(System.in); System.out.println("输入一个整型数字:"); int num = input.nextInt(); //保存用户输入的数字 BigInteger bi = new BigInteger(num+""); //使用输入的数字创建BigInteger对象 // 计算大数字加上45的结果; System.out.println("加法:"+bi.add(new BigInteger("45"))); // 计算大数字减去20的结果 System.out.println("减法:"+bi.subtract(new BigInteger("20"))); // 计算大数字乘以3的结果 System.out.println("乘法:"+bi.multiply(new BigInteger("3"))); // 除以2的结果 System.out.println("除法:"+bi.divide(new BigInteger("2"))); } }

输出:
输入一个整型数字:
10
加法:55
减法:-10
乘法:30
除法:5
BigDecimal 类
  • BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。
  • BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。
  • 常用的构造方法如下:
    1、 BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。
    2、 BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。
  • BigDecimal add(BigDecimal augend) //加法
  • BigDecimal subtract(BigDecimal substrhead); //减法操作
  • BigDecimal multiply(BigDecimal multiplieand); //乘法操作
  • BigDecimal divide(BigDecimal divisor, int scale, int roundingMode); //除法操作
  • divide() 方法的 3 个参数分别表示除数、商的小数点后的位数和近似值处理模式。
【JAVA(12)数字】| roundingMode参数支持的处理模式 |
模式名称 说明
BigDecimal.ROUND_UP 商的最后一位如果大于 0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN 商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING 商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN模式处理
BigDecimal.ROUND_FLOOR 与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理;如果是负数,按照 ROUND_UP 模式处理
BigDecimal.ROUND_HALF_ DOWN 对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后一位进行进位操作
BigDecimal.ROUND_HALF_UP 对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位进行进位操作
BigDecimal.ROUND_HALF_EVEN 如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按照 ROUND_HALF_DOWN 处理

    推荐阅读