JAVA(12)數(shù)字

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 處理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末适揉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子煤惩,更是在濱河造成了極大的恐慌嫉嘀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魄揉,死亡現(xiàn)場離奇詭異剪侮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洛退,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門瓣俯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兵怯,你說我怎么就攤上這事彩匕。” “怎么了摇零?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵推掸,是天一觀的道長。 經(jīng)常有香客問我驻仅,道長谅畅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任噪服,我火速辦了婚禮毡泻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粘优。我一直安慰自己仇味,他們只是感情好呻顽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丹墨,像睡著了一般廊遍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贩挣,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天喉前,我揣著相機(jī)與錄音,去河邊找鬼王财。 笑死卵迂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绒净。 我是一名探鬼主播见咒,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挂疆!你這毒婦竟也來了改览?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤囱嫩,失蹤者是張志新(化名)和其女友劉穎恃疯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墨闲,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡今妄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸳碧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾鳞。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞻离,靈堂內(nèi)的尸體忽然破棺而出腾仅,到底是詐尸還是另有隱情,我是刑警寧澤套利,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布推励,位于F島的核電站,受9級特大地震影響肉迫,放射性物質(zhì)發(fā)生泄漏验辞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一喊衫、第九天 我趴在偏房一處隱蔽的房頂上張望跌造。 院中可真熱鬧,春花似錦族购、人聲如沸壳贪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽违施。三九已至互纯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醉拓,已是汗流浹背伟姐。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亿卤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓鹿霸,卻偏偏與公主長得像排吴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子懦鼠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容