<small id="7ktuj"></small>
      <bdo id="7ktuj"></bdo>
        <mark id="7ktuj"></mark>

        <source id="7ktuj"></source>
        <small id="7ktuj"></small>

        ITPub博客

        首頁 > 應用開發 > Java > Java中Math類常用方法

        Java中Math類常用方法

        原創 Java 作者:蝴蝶飛啊飛 時間:2019-10-29 12:09:41 0 刪除 編輯

        1 Java Math 類常用方法總結

                Java Math 類常用的方法有: Math.ceil() Math.floor() Math.round() Math.abs() Math.sqrt() Math.pow()

                Java Math 類中定義的特殊數據有:   Math.PI( 圓周率 ) Math.E( 自然數 )

        Java 1.6 中文版 API 下載地址為: Java 1.6 中文版 API 下載地址  

        package Test_02;

        import java.util.Random;

        public class T03_Math {

        public static void main(String[] args) {

        System.out.println(Math.ceil(3.2));  // 返回值: 4.0 , 返回最小的(最接近負無窮大) double 值,該值大于等于參數,并等于某個整數。

        System.out.println(Math.floor(3.2));  // 返回值: 3.0 ,返回最大的(最接近正無窮大) double 值,該值小于等于參數,并等于某個整數。

        System.out.println(Math.round(3.2));  // 返回值: 3 ,返回最接近參數的 int ( 四舍五入 )

        System.out.println(Math.round(3.8));  // 返回值: 4 ,返回最接近參數的 int ( 四舍五入 )

        System.out.println("--------------------------------");

        System.out.println(Math.abs(-45));  // 返回值: 45 ,求取絕對值

        System.out.println(Math.sqrt(64));  // 返回值: 8.0 ,返回正確舍入的 double 值的正平方根。

        System.out.println(Math.pow(5, 2));  // 返回值: 25.0 , 返回第一個參數的第二個參數次冪的值。

        System.out.println(Math.pow(2, 5));  // 返回值: 32.0

        System.out.println("--------------------------------");

        System.out.println(Math.PI);  // 返回值: 3.141592653589793 ,返回圓周率Π

        System.out.println(Math.E);  // 返回值: 2.718281828459045 ,返回比任何其他值都更接近 e (即自然對數的底數)的 double 值。

        System.out.println(Math.exp(2));  // 返回值: 7.38905609893065 ,返回 返回歐拉數 e double 次冪的值。

        System.out.println("--------------------------------");

        }

        }

        2 Random 類與 Math 類小結合

                  注意:仔細體味下段代碼中內含的“奇妙 ”,品味 Random 類于 Math 類在處理隨機數中的異同。

        package Test_03;

        import java.util.Random;

        public class T03_MathAndRandom {

        public static void main(String[] args) {

        // 調用 Math 類中方法返回 0.0 —— 1.0 之間均勻分布的 double 值。

        double d = Math.random();

        System.out.println(d);

        System.out.println("--------------------------------");

        // 生成: 0-10 之間的任意整數:

        int a1 = (int)(10 * Math.random());

        System.out.println(a1);

        // 生成: 20-30 之間的任意整數:

        int a2 = 20 + (int)(10 * Math.random());

        System.out.println(a2);

        System.out.println("--------------------------------");

        // 調用 Random 類中方法返回 0.0 —— 1.0 之間均勻分布的 double 值。

        Random ran = new Random();

        double d2 = ran.nextDouble();

        System.out.println(d2);

        // 生成: 0-10 之間的任意整數:

        int a3 = ran.nextInt(10);

        System.out.println(a3);

        // 生成: 20-30 之間的任意整數:

        int a4 = 20 + ran.nextInt(10);

        System.out.println(a4);

        }

        }

        public class Demo{

            public static void main(String args[]){  

                /**

                 *Math.sqrt()// 計算平方根

                 *Math.cbrt()// 計算立方根

                 *Math.pow(a, b)// 計算 a b 次方

                 *Math.max( , );// 計算最大值

                 *Math.min( , );// 計算最小值

                 */  

                System.out.println(Math.sqrt(16));   //4.0

                System.out.println(Math.cbrt(8));    //2.0

                System.out.println(Math.pow(3,2));     //9.0

                System.out.println(Math.max(2.3,4.5));//4.5

                System.out.println(Math.min(2.3,4.5));//2.3

                /**

                 * abs 求絕對值

                 */  

                System.out.println(Math.abs(-10.4));    //10.4  

                System.out.println(Math.abs(10.1));     //10.1  

                /**

                 * ceil 天花板的意思,向上取整

                 */  

                System.out.println(Math.ceil(-10.1));   //-10.0  

                System.out.println(Math.ceil(10.7));    //11.0  

                System.out.println(Math.ceil(-0.7));    //-0.0  

                System.out.println(Math.ceil(0.0));     //0.0  

                System.out.println(Math.ceil(-0.0));    //-0.0  

                System.out.println(Math.ceil(-1.7));    //-1.0

                /**

                 * floor 地板的意思,向下取整

                 */  

                System.out.println(Math.floor(-10.1));  //-11.0  

                System.out.println(Math.floor(10.7));   //10.0  

                System.out.println(Math.floor(-0.7));   //-1.0  

                System.out.println(Math.floor(0.0));    //0.0  

                System.out.println(Math.floor(-0.0));   //-0.0  

                /**

                 * random 取得一個大于或者等于 0.0 小于不等于 1.0 的隨機數 [0,1)

                 */  

                System.out.println(Math.random());  // 小于 1 大于 0 double 類型的數

                System.out.println(Math.random()*2);// 大于 0 小于 1 double 類型的數

                System.out.println(Math.random()*2+1);// 大于 1 小于 2 double 類型的數

                /**

                 * rint 四舍五入,返回 double

                 * 注意偶數 .5 的時候會舍棄    

                 */  

                System.out.println(Math.rint(10.1));    //10.0  

                System.out.println(Math.rint(10.7));    //11.0  

                System.out.println(Math.rint(11.5));    //12.0  

                System.out.println(Math.rint(10.5));    //10.0  

                System.out.println(Math.rint(10.51));   //11.0  

                System.out.println(Math.rint(-10.5));   //-10.0  

                System.out.println(Math.rint(-11.5));   //-12.0  

                System.out.println(Math.rint(-10.51));  //-11.0  

                System.out.println(Math.rint(-10.6));   //-11.0  

                System.out.println(Math.rint(-10.2));   //-10.0  

         

                /**

                 * round 0.50 向下取整, float 時返回 int 值, double 時返回 long

                 */  

                System.out.println(Math.round(10.1));   //10  

                System.out.println(Math.round(10.7));   //11  

                System.out.println(Math.round(10.5));   //11  

                System.out.println(Math.round(10.51));  //11  

                System.out.println(Math.round(-10.5));  //-10  

                System.out.println(Math.round(-10.51)); //-11  

                System.out.println(Math.round(-10.6));  //-11  

                System.out.println(Math.round(-10.2));  //-10  

            }  

        }

        /**

                 * 常量

                 */

                System.out.println("------>" + Math.E);//2.718281828459045

                System.out.println("------>" + Math.PI);//3.141592653589793

                /**

                 * Math.abs() 計算絕對值

                 */

                System.out.println("------>" + Math.abs(-3));//3

                /**

                 * 三角函數與反三角函數

                 * cos 求余弦

                 * sin 求正弦

                 * tan 求正切

                 * acos 求反余弦

                 * asin 求反正弦

                 * atan 求反正切

                 * atan2(y,x) 求向量 (x,y) x 軸夾角

                 * cosh 計算值的雙曲余弦

                 * sinh 計算雙曲正弦

                 * tanh 計算雙曲正切

                 */

                System.out.println("------>" + Math.acos(1));

                System.out.println("------>" + Math.acos(-1));

                /**

                 * Math.cbrt() 開立方根

                 */

                System.out.println("------>" + Math.cbrt(-1));//-1.0

                System.out.println("------>" + Math.cbrt(1));//1.0

                System.out.println("------>" + Math.cbrt(0.5));//0.7937005259840998

                System.out.println("------>" + Math.cbrt(5));//1.709975946676697

                /**

                 * Math.sqrt(x) 開平方

                 */

                System.out.println("------>" + Math.sqrt(4.0));//2.0

                /**

                 * Math.hypot(x,y) sqrt(x*x+y*y) 在求兩點間距離時有用 sqrt((x1-x2)^2+(y1-y2)^2)

                 */

                System.out.println("------>" + Math.hypot(3.0, 4.0));//5.0

                /**

                 * ceil 天花板,向上取整,返回大的值

                 */

                System.out.println("------1>" + Math.ceil(7.2));//8.0

                System.out.println("------2>" + Math.ceil(7.5));//8.0

                System.out.println("------3>" + Math.ceil(7.6));//8.0

                System.out.println("------4>" + Math.ceil(-7.2));//-7.0

                System.out.println("------5>" + Math.ceil(-7.5));//-7.0

                System.out.println("------6>" + Math.ceil(-7.6));//-7.0

                /**

                 * floor 地板,向下取整,返回小的值

                 */

                System.out.println("------1>" + Math.floor(7.2));//7.0

                System.out.println("------2>" + Math.floor(7.5));//7.0

                System.out.println("------3>" + Math.floor(7.6));//7.0

                System.out.println("------4>" + Math.floor(-7.2));//-8.0

                System.out.println("------5>" + Math.floor(-7.5));//-8.0

                System.out.println("------6>" + Math.floor(-7.6));//-8.0

                /**

                 * Math.cosh() 返回 double 值的雙曲線余弦。 x 的雙曲線余弦的定義是 (ex + e-x)/2 ,其中 e 是歐拉數

                 */

                System.out.println("------>" + Math.cosh(1));//1.543080634815244

                System.out.println("------>" + Math.cosh(0));//1.0

                /**

                 * exp(x) 返回 e^x 的值

                 * expm1(x) 返回 e^x - 1 的值

                 * pow(x,y) 返回 x^y 的值

                 * 這里可用的數據類型也只有 double

                 */

                System.out.println("------>" + Math.exp(2));//7.38905609893065

                System.out.println("------>" + Math.expm1(2));//6.38905609893065

                System.out.println("------>" + Math.pow(2.0, 3.0));//8.0

                /**

                 * 對數

                 * Math.log(a) a 的自然對數 ( 底數是 e)

                 * Math.log10(a) a 的底數為 10 的對數

                 * Math.log1p(a) a+1 的自然對數

                 * 值得注意的是,前面其他函數都有重載,對數運算的函數只能傳 double 型數據并返回 double 型數據

                 */

                System.out.println("------1>" + Math.log(Math.E));//1.0

                System.out.println("------2>" + Math.log10(10));//1.0

                System.out.println("------3>" + Math.log1p(Math.E - 1.0));//1.0

                /**

                 * Math.max() 求最大值

                 * Math.min() 求最小值

                 */

                System.out.println("------1>" + Math.max(1, 2));//2

                System.out.println("------2>" + Math.min(1, -2));//-2

                /**

                 * Math.nextAfter() 返回與第二個參數方向相鄰的第一個參數的浮點數。

                 */

                System.out.println("------1>" + Math.nextAfter(-1, 2));//-0.99999994

                System.out.println("------2>" + Math.nextAfter(1, 2));//1.0000001

                /**

                 * Math.nextUp() 返回與正無窮大方向相鄰的 d 的浮點值。

                 */

                System.out.println("------>" + Math.nextUp(1));//1.0000001

                System.out.println("------>" + Math.nextUp(-1));//-0.99999994

                /**

                 * Math.Random() 函數能夠返回帶正號的 double 值,該值大于等于 0.0 且小于 1.0 ,即取值范圍是 [0.0,1.0) 的左閉右開區間,

                 * 返回值是一個偽隨機選擇的數,在該范圍內(近似)均勻分布

                 */

                System.out.println("------>" + Math.random());// 取值范圍是 [0.0,1.0) 的隨機數

                /**

                 * Math.rint(x) x 取整為它最接近的整數,如果 x 與兩個整數的距離相等,則返回其中為偶數的那一個。

                 */

                System.out.println("------>" + Math.rint(3.5));//4.0

                System.out.println("------>" + Math.rint(4.5));//4.0

                System.out.println("------>" + Math.rint(3.1));//3.0

                System.out.println("------>" + Math.rint(4.1));//4.0

                System.out.println("------>" + Math.rint(3.7));//4.0

                System.out.println("------>" + Math.rint(4.7));//5.0

                /**

                 * Math.round(x) :返回 Math.floor(x+0.5) ,即“四舍五入”值。

                 */

                System.out.println("------>" + Math.round(3.5));//4

                System.out.println("------>" + Math.round(4.5));//5

                System.out.println("------>" + Math.round(3.1));//3

                System.out.println("------>" + Math.round(4.7));//5

                /**

                 * Math.scalb(double d, int scaleFactor), 返回 f × 2scaleFactor ,其舍入方式如同將一個正確舍入的浮點值乘以 float

                 * 值集合中的一個值

                 * 返回 d 和正無窮大之間與 d 相鄰的浮點值 tatic double   nextUp(double d)

                 */

                System.out.println("------1>" + Math.scalb(1.5d, 6));//96

                /**

                 * Math.scalb(float f, int scaleFactor)

                 * 返回 f 和正無窮大之間與 f 相鄰的浮點值 tatic float    nextUp(float f)

                 * 返回第一個參數和第二個參數之間與第一個參數相鄰的浮點數

                 */

                System.out.println("------2>" + Math.scalb(1.5f, 6));//96

                /**

                 * Math.signum 方法返回指定 int 值的符號函數(如果指定值為負,則返回 -1 ;如果指定值為零,則返回 0 ;如果指定值為正,則返回 1 )。

                 */

                System.out.println("------1>" + Math.signum(10));//1.0

                System.out.println("------2>" + Math.signum(-10));//-1.0

                System.out.println("------3>" + Math.signum(0));//0.0

                /**

                 * Math.toDegrees() 將弧度轉換角度

                 */

                System.out.println("------3>" + Math.toDegrees(1.57));//89.95437383553926

                /**

                 * Math.toRadians() 將角度轉換為弧度

                 */

                System.out.println("------3>" + Math.toRadians(90));//1.5707963267948966

                /**

                 * Math.ulp()

                 * 如果要理解什么是 ulp(unit in the last place or unit of least precision (ULP))

                 * 先要了解在外匯返傭http://www.kaifx.cn/計算機中保存的數和我們在數學上認為的數是不一樣的;

                 * 比方說 2.0 3.0 之間有多少個數,在數學中是無限的,但是在計算機中是有限的,

                 * 因為計算機需要用一堆字節來表示 double 或者 float, 但是因為計算機表示不了無限的數(因為沒有無限內存)。

                 *

                 * 所以就有了 ulp ,假設在 float 2.0 3.0 之間有 8,388,609 個數,那么在 2.0 3.0 之間的數的 ulp 就是 8,388,609/1.0 約等于 0.0000001

                 *

                 * 你如果想知道某一個具體的 double float 的先一個或者上一個數字是什么可以使用函數

                 * public static double nextAfter(float start, float direction)

                 * public static double nextAfter(double start, double direction)

                 */

                /**

                 * java8 Math 新增方法

                 */

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

                    /**

                     * Math.addExact() 求和,如果結果溢出取值范圍,則引發異常。

                     */

                    System.out.println("------>" + Math.addExact(1, 2));//3

                    /**

                     * Math.substractExact() 方法返回兩個參數之差,結果溢出時拋出 ArithmeticException

                     */

                    System.out.println("------>" + Math.subtractExact(100, 50));//50

                    /**

                     * Math.incrementExact() 方法 返回參數值加一,結果溢出時拋出 ArithmeticException

                     */

                    System.out.println("------>" + Math.incrementExact(100));//101

                    /**

                     * Math.decrementExact() 方法 返回參數值減一,結果溢出時拋出 ArithmeticException

                     */

                    System.out.println("------>" + Math.decrementExact(100));//99

                    /**

                     * Math.multiplyExact() 方法 返回兩個參數之積,結果溢出時拋出 ArithmeticException

                     */

                    System.out.println("------>" + Math.multiplyExact(100, 5));//500

                    /**

                     * Math.negateExact() 方法 改變參數符號,結果溢出時拋出 ArithmeticException

                     */

                    System.out.println("------>" + Math.negateExact(100));//-100

                    /**

                     * Math.floorDiv(1,2) 第一個參數除以第二參數,然后針對結果執行 floor 操作,返回小于或等于商的整數:

                     */

                    System.out.println("------>" + Math.floorDiv(7, 3));//2

                    System.out.println("------>" + Math.floorDiv(-7, 3));//-3

                    /**

                     * Math.floorMod()

                     * 1 、如果參數的符號相同,則 floorMod 和%運算符的結果是相同的。

                     * 2 、如果參數的符號不同,則結果與%運算符不同。

                     */

                    // 如果參數的符號相同,則 floorMod 和%運算符的結果是相同的。

                    System.out.println("------1>" + Math.floorMod(4, 3));//1

                    System.out.println("------2>" + (4 % 3));//1

                    // 如果參數的符號不同,則結果與%運算符不同。

                    System.out.println("------3>" + Math.floorMod(4, -3));//-2

                    System.out.println("------4>" + (4 % -3));//1

                    System.out.println("------5>" + Math.floorMod(-4, 3));//2

                    System.out.println("------6>" + (-4 % 3));//-1

                    System.out.println("------7>" + Math.floorMod(-4, -3));//-1

                    System.out.println("------8>" + (-4 % -3));//-1

                    /**

                     * Math.toIntExact(),long int

                     */

                    System.out.println("------1>" + Math.toIntExact(1));

                    /**

                     * Math.nextDown() 返回與負無窮大方向相鄰的 f 的浮點值。

                     */

                    System.out.println("------>" + Math.nextDown(1));//0.99999994

                    System.out.println("------>" + Math.nextDown(-1));//-1.0000001

                }


        來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/69946279/viewspace-2661767/,如需轉載,請注明出處,否則將追究法律責任。

        請登錄后發表評論 登錄
        全部評論
        管他誰是誰非,做自己的主宰,我是這條街最亮的崽!

        注冊時間:2019-08-22

        • 博文量
          49
        • 訪問量
          21835
        妹子图每日分享