Math 類封裝了常用的數(shù)學(xué)運(yùn)算,提供了基本的數(shù)學(xué)操作酌心,如指數(shù)拌消、對數(shù)、平方根和三角函數(shù)等
Math 類位于 java.lang 包
靜態(tài)常量
Math 類中包含 E 和 PI 兩個(gè)靜態(tài)常量安券,其中 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
求整運(yùn)算
方法 | 說明 |
---|---|
static double ceil(double a) | 返回大于或等于 a 的最小整數(shù) |
static double floor(double a) | 返回小于或等于 a 的最大整數(shù) |
static double rint(double a) | 返回最接近 a 的整數(shù)值,如果有兩個(gè)同樣接近的整數(shù)址貌,則結(jié)果取偶數(shù) |
static int round(float a) | 將參數(shù)加上 1/2 后返回與參數(shù)最近的整數(shù) |
static long round(double a) | 將參數(shù)加上 1/2 后返回與參數(shù)最近的整數(shù)铐拐,然后強(qiáng)制轉(zhuǎn)換為長整型 |
import java.util.Scanner;
public class Test03
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.outprintln("請輸入一個(gè)數(shù)字:");
double num=input.nextDouble();
System.out.println("大于或等于 "+num+" 的最小整數(shù):"+Math.ceil(num));
System.out.println("小于或等于 "+num+" 的最大整數(shù):"+Math.floor(num));
System.out.println("將 "+num+" 加上 0.5 之后最接近的整數(shù):"+Math.round(num));
System.out.println("最接近 "+num+" 的整數(shù):"+Math.rint(num));
}
}
三角函數(shù)運(yùn)算
方法 | 說明 |
---|---|
static double sin(double a) | 返回角的三角正弦值,參數(shù)以孤度為單位 |
static double cos(double a) | 返回角的三角余弦值练对,參數(shù)以孤度為單位 |
static double asin(double a) | 返回一個(gè)值的反正弦值遍蟋,參數(shù)域在 [-1,1],值域在 [-PI/2,PI/2] |
static double acos(double a) | 返回一個(gè)值的反余弦值螟凭,參數(shù)域在 [-1,1]虚青,值域在 [0.0,PI] |
static double tan(double a) | 返回角的三角正切值,參數(shù)以弧度為單位 |
static double atan(double a) | 返回一個(gè)值的反正切值赂摆,值域在 [-PI/2,PI/2] |
static double toDegrees(double angrad) | 將用孤度表示的角轉(zhuǎn)換為近似相等的用角度表示的角 |
staticdouble toRadians(double angdeg) | 將用角度表示的角轉(zhuǎn)換為近似相等的用弧度表示的角 |
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));
}
}
指數(shù)運(yùn)算
指數(shù)的運(yùn)算包括求方根挟憔、取對數(shù)及其求 n 次方的運(yùn)算。
方法 | 說明 |
---|---|
static double exp(double a) | 返回 e 的 a 次冪 |
static double pow(double a,double b) | 返回以 a 為底數(shù)烟号,以 b 為指數(shù)的冪值 |
static double sqrt(double a) | 返回 a 的平方根 |
static double cbrt(double a) | 返回 a 的立方根 |
static double log(double a) | 返回 a 的自然對數(shù)绊谭,即 lna 的值 |
static double log10(double a) | 返回以 10 為底 a 的對數(shù) |
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 的對數(shù):"+Math.log1O(2));
}
}
生成隨機(jī)數(shù)(random()和random類)
方法 | 說明 |
---|---|
boolean nextBoolean() | 生成一個(gè)隨機(jī)的 boolean 值,生成 true 和 false 的值概率相等 |
double nextDouble() | 生成一個(gè)隨機(jī)的 double 值汪拥,數(shù)值介于[0,1.0)达传,含 0 而不包含 1.0 |
int nextlnt() | 生成一個(gè)隨機(jī)的 int 值,該值介于 int 的區(qū)間迫筑,也就是 -231~231-1宪赶。如果需要生成指定區(qū)間的 int 值,則需要進(jìn)行一定的數(shù)學(xué)變換 |
int nextlnt(int n) | 生成一個(gè)隨機(jī)的 int 值脯燃,該值介于 [0,n)搂妻,包含 0 而不包含 n。如果想生成指定區(qū)間的 int 值辕棚,也需要進(jìn)行一定的數(shù)學(xué)變換 |
void setSeed(long seed) | 重新設(shè)置 Random 對象中的種子數(shù)欲主。設(shè)置完種子數(shù)以后的 Random 對象和相同種子數(shù)使用 new 關(guān)鍵字創(chuàng)建出的 Random 對象相同 |
long nextLong() | 返回一個(gè)隨機(jī)長整型數(shù)字 |
boolean nextBoolean() | 返回一個(gè)隨機(jī)布爾型值 |
float nextFloat() | 返回一個(gè)隨機(jī)浮點(diǎn)型數(shù)字 |
double nextDouble() | 返回一個(gè)隨機(jī)雙精度值 |
格式化數(shù)據(jù)
DecimalFormat 是 NumberFormat 的一個(gè)子類邓厕,用于格式化十進(jìn)制數(shù)字。DecimalFormat 類包含一個(gè)模式和一組符號
符號 | 說明 |
---|---|
0 | 顯示數(shù)字扁瓢,如果位數(shù)不夠則補(bǔ) 0 |
# | 顯示數(shù)字详恼,如果位數(shù)不夠不發(fā)生變化 |
. | 小數(shù)分隔符 |
- | 減號 |
, | 組分隔符 |
E | 分隔科學(xué)記數(shù)法中的尾數(shù)和小數(shù) |
% | 前綴或后綴,乘以 100 后作為百分比顯示 |
? | 乘以 1000 后作為千進(jìn)制貨幣符顯示引几。用貨幣符號代替昧互。如果雙寫,用國際貨幣符號代替伟桅;如果出現(xiàn)在一個(gè)模式中敞掘,用貨幣十進(jìn)制分隔符代替十進(jìn)制分隔符 |
import java.text.DecimalFormat;
import java.util.Scanner;
public class Test {
public static void main (String[] args) {
//實(shí)例化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("請輸入一個(gè)float類型的數(shù)字:");
float f = scan.nextFloat();
//對輸入的數(shù)字應(yīng)用格式贿讹,并輸出結(jié)果
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));
}
}
大數(shù)字運(yùn)算(BigInteger類和BigDecimal類)
- BigInteger 類來處理比 Integer 更大的數(shù)字
- BigInteger 支持任意精度的整數(shù)渐逃,也就是說在運(yùn)算中 BigInteger 類型可以準(zhǔn)確地表示任何大小的整數(shù)值。
- 要使用 BigInteger 類民褂,首先要創(chuàng)建一個(gè) BigInteger 對象茄菊。
- 最直接的一種是參數(shù)以字符串形式代表要處理的數(shù)字
語法:
- BigInteger(String val)
- BigInteger bi=new BigInteger("5")
- 這里數(shù)字 5 的雙引號是必需的,因?yàn)?BigInteger 類構(gòu)造方法要求參數(shù)是字符串類型赊堪。
方法名稱 | 說明 |
---|---|
add(BigInteger val) | 做加法運(yùn)算 |
subtract(BigInteger val) | 做減法運(yùn)算 |
multiply(BigInteger val) | 做乘法運(yùn)算 |
divide(BigInteger val) | 做除法運(yùn)算 |
remainder(BigInteger val) | 做取余數(shù)運(yùn)算 |
divideAndRemainder(BigInteger val) | 做除法運(yùn)算面殖,返回?cái)?shù)組的第一個(gè)值為商,第二個(gè)值為余數(shù) |
pow(int exponent) | 做參數(shù)的 exponent 次方運(yùn)算 |
negate() | 取相反數(shù) |
shiftLeft(int n) | 將數(shù)字左移 n 位哭廉,如果 n 為負(fù)數(shù)脊僚,則做右移操作 |
shiftRight(int n) | 將數(shù)字右移 n 位,如果 n 為負(fù)數(shù)遵绰,則做左移操作 |
and(BigInteger val) | 做與運(yùn)算 |
or(BigInteger val) | 做或運(yùn)算 |
compareTo(BigInteger val) | 做數(shù)字的比較運(yùn)算 |
equals(Object obj) | 當(dāng)參數(shù) obj 是 Biglnteger 類型的數(shù)字并且數(shù)值相等時(shí)返回 true, 其他返回 false |
min(BigInteger val) | 返回較小的數(shù)值 |
max(BigInteger val) | 返回較大的數(shù)值 |
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("輸入一個(gè)整型數(shù)字:");
int num = input.nextInt();//保存用戶輸入的數(shù)字
BigInteger bi = new BigInteger(num+"");//使用輸入的數(shù)字創(chuàng)建BigInteger對象
// 計(jì)算大數(shù)字加上45的結(jié)果辽幌;
System.out.println("加法:"+bi.add(new BigInteger("45")));
// 計(jì)算大數(shù)字減去20的結(jié)果
System.out.println("減法:"+bi.subtract(new BigInteger("20")));
// 計(jì)算大數(shù)字乘以3的結(jié)果
System.out.println("乘法:"+bi.multiply(new BigInteger("3")));
// 除以2的結(jié)果
System.out.println("除法:"+bi.divide(new BigInteger("2")));
}
}
輸出:
輸入一個(gè)整型數(shù)字:
10
加法:55
減法:-10
乘法:30
除法:5
BigDecimal 類
- BigInteger 和 BigDecimal 都能實(shí)現(xiàn)大數(shù)字的運(yùn)算,不同的是 BigDecimal 加入了小數(shù)的概念椿访。
- BigDecimal 類支持任何精度的浮點(diǎn)數(shù)乌企,可以用來精確計(jì)算貨幣值。
- 常用的構(gòu)造方法如下:
1成玫、 BigDecimal(double val):實(shí)例化時(shí)將雙精度型轉(zhuǎn)換為 BigDecimal 類型加酵。
2、 BigDecimal(String val):實(shí)例化時(shí)將字符串形式轉(zhuǎn)換為 BigDecimal 類型哭当。 - BigDecimal add(BigDecimal augend) //加法
- BigDecimal subtract(BigDecimal substrhead); //減法操作
- BigDecimal multiply(BigDecimal multiplieand); //乘法操作
- BigDecimal divide(BigDecimal divisor, int scale, int roundingMode); //除法操作
- divide() 方法的 3 個(gè)參數(shù)分別表示除數(shù)猪腕、商的小數(shù)點(diǎn)后的位數(shù)和近似值處理模式。
| roundingMode參數(shù)支持的處理模式 |
模式名稱 | 說明 |
---|---|
BigDecimal.ROUND_UP | 商的最后一位如果大于 0钦勘,則向前進(jìn)位陋葡,正負(fù)數(shù)都如此 |
BigDecimal.ROUND_DOWN | 商的最后一位無論是什么數(shù)字都省略 |
BigDecimal.ROUND_CEILING | 商如果是正數(shù),按照 ROUND_UP 模式處理彻采;如果是負(fù)數(shù)脖岛,按照 ROUND_DOWN模式處理 |
BigDecimal.ROUND_FLOOR | 與 ROUND_CELING 模式相反朵栖,商如果是正數(shù),按照 ROUND_DOWN 模式處理;如果是負(fù)數(shù)终惑,按照 ROUND_UP 模式處理 |
BigDecimal.ROUND_HALF_ DOWN | 對商進(jìn)行五舍六入操作绍在。如果商最后一位小于等于 5,則做舍棄操作雹有,否則對最后一位進(jìn)行進(jìn)位操作 |
BigDecimal.ROUND_HALF_UP | 對商進(jìn)行四舍五入操作偿渡。如果商最后一位小于 5,則做舍棄操作霸奕,否則對最后一位進(jìn)行進(jìn)位操作 |
BigDecimal.ROUND_HALF_EVEN | 如果商的倒數(shù)第二位是奇數(shù)溜宽,則按照 ROUND_HALF_UP 處理;如果是偶數(shù)质帅,則按照 ROUND_HALF_DOWN 處理 |