java中的Math類封裝的屬性和方法
???????? java.lang.Math類擁有基本的數學操作,如指數、對數、平方根和三角函數等等,使用它可以避免程序員自行研發數學方面的代碼。此外,java還有一個java.math包,它提供用于執行任意精度整數(BigInteger)算法和任意精度小數(BigDecimal)算法的類。
???????? 本文為大家展示Math類的常用方法。Math類屬于包java.lang,因此使用它時無需用import導入。Math類封裝的屬性和方法大致如下:
public class Main {
??? public static void main(String[] args) {
?????? // 兩個靜態成員變量 ?????? System.out.println("自然對數的底數E是:" + Math.E); // 數學中的E(即自然對數的底數)。 ?????? System.out.println("圓周率是:" + Math.PI);// 數學中的 圓周率。
?????? // 函數羅列于下
?????? /* ?????? ?* 1.求絕對值abs() ?????? ?*/ ?????? System.out.println("絕對值是:" + Math.abs(-5.4));// 輸出5.4
?????? /* ?????? ?* 2.求最值 ?????? ?* max(a,b)求最大值 ?????? ?* min(a,b)求最小值 ?????? ?*/ ?????? System.out.println("最大值是:" + Math.max(1, 2)); // 輸出2 ?????? System.out.println("最小值是:" + Math.min(1.9, -0.2));// 輸出-0.2
?????? /* ?????? ?* 3.求隨機數 random()返回[0.0,1.0)之間的double值。可進一步通過*x控制取值界限,見示例。 ?????? ?*/ ?????? // 輸出[0,100)之間的隨機整數 ?????? System.out.println("1~100間的隨機數:" + (int) (Math.random() * 100));
?????? //////////// Exponential:冪、開方、對數等運算 ?????? /* ?????? ?* 4.冪運算 ?????? ?* pow(x,y) 返回x^y的值 ?????? ?* exp(x) 返回e^x的值 ?????? ?* expm1(x) 返回e^x - 1的值 ?????? ?* 所有數據類型都是double型 ?????? ?*/ ?????? System.out.println("2的平方是:" + Math.pow(2.0, 2.0));// 輸出8.0 ?????? System.out.println("2的立方是:" + Math.pow(2.0, 3.0));// 輸出8.0 ?????? System.out.println("e的5次方是:" + Math.exp(5));// 輸出E^5的值 ?????? System.out.println("e的5次方減1是:" + Math.expm1(5));// 輸出E^5 -1 的值
?????? /* ?????? ?* 5.開方運算 ?????? ?* sqrt(x)開平方,cbrt(x)開立方 ?????? ?* hypot(x,y):等于sqrt(x*x+y*y)。在求兩點間距離時有用sqrt((x1-x2)^2+(y1-y2)^2) ?????? ?*/ ?????? System.out.println("4的平方根 開2次方:" + Math.sqrt(4.0));// 輸出2.0 ?????? System.out.println("8的立方根 開3次方:" + Math.cbrt(8.0));// 輸出2.0 ?????? System.out.println("平方之和開2次方:" + Math.hypot(3.0, 4.0));// 輸出5.0
?????? /* ?????? ?* 6.對數 ?????? ?* log(a) a的自然對數(底數是e) ?????? ?* log1p(a) a+1的自然對數 ?????? ?* log10(a) a的底數為10的對數 ?????? ?* 所有數據類型都是double型數據并返回double型數據 ?????? ?*/ ?????? System.out.println("E的自然對數:" + Math.log(Math.E));// 輸出1.0 ?????? System.out.println("10的以10為底的自然對數:" + Math.log10(10));// 輸出1.0 ?????? System.out.println("加1后的自然對數:" + Math.log1p(Math.E - 1.0));// 輸出1.0
?????? /* ?????? ?* 7.三角函數與反三角函數 ?????? ?* sin()求正弦,cos()求余弦,tan()求正切:參數都是以弧度表示的角 ?????? ?* asin()求反正弦,acos()求反余弦,atan()求反正切 ?????? ?* atan2(y,x)求向量(x,y)與x軸夾角 ?????? ?*/ ?????? System.out.println("30° 的正弦值:" + Math.sin(Math.PI / 6)); ?????? System.out.println("30° 的余弦值:" + Math.cos(Math.PI / 6)); ?????? System.out.println("30° 的正切值:" + Math.tan(Math.PI / 6));
?????? System.out.println("弧度:" + Math.acos(1.0));// 輸出弧度0... ?????? System.out.println("弧度:" + Math.acos(-1.0));// 輸出圓周率3.14...
?????? System.out.println("夾角:" + Math.atan2(1.0, 1.0));// 輸出 π/4 的小數值
?????? /* ?????? ?* 8.角度和弧度的轉換 ?????? ?* toDegrees(a) 弧度轉換成角度 ?????? ?* toRadians(a) 角度轉換成弧度 ?????? ?*/ ?????? System.out.println("30° 對應的的弧度是:" + Math.toRadians(30)); ?????? System.out.println("45° 對應的的弧度是:" + Math.toRadians(45)); ?????? System.out.println("π/6 對應的的角度是:" + Math.toDegrees(Math.PI / 6)); ?????? System.out.println("π/4對應的的角度是:" + Math.toDegrees(Math.PI / 4)); ?????? System.out.println("PI 對應的的角度是:" + Math.toDegrees(Math.PI));// 輸出180.0 ?????? System.out.println("180度 對應的的弧度是:" + Math.toRadians(180));// 輸出 π的值
?????? /* ?????? ?* 9.取整 ?????? ?*/ ?????? // ceil(a):向上取整,返回大于a的第一個整數所對應的浮點數(值是整的,類型是浮點型) ?????? // 可以通過強制轉換將返回值強轉成整型 ?????? System.out.println("向上取整:" + Math.ceil(1.3443));// 輸出2.0 ?????? System.out.println("向上取整后再截斷:" + (int) Math.ceil(1.3443));// 輸出2
?????? // floor(a):向下取整,返回小于a的第一個整數所對應的浮點數(值是整的,類型是浮點型) ?????? System.out.println("向下取整:" + Math.floor(1.3443));// 輸出1.0
?????? // rint(a) 返回最接近a的整數的double值。如果有兩個整數同樣接近,就返回偶數的那個 ?????? System.out.println("最接近:" + Math.rint(1.5));// 輸出2.0 。1與2同樣接近,選擇2 ?????? System.out.println("最接近:" + Math.rint(2.5));// 輸出2.0 。2與3同樣接近,選擇2 ?????? System.out.println("最接近:" + Math.rint(1.8));// 輸出2.0
?????? // round(a) 四舍五入.返回四舍五入后的整數值。 ?????? System.out.println("四舍五入:" + Math.round(1.5));// 輸出2 ?????? System.out.println("四舍五入:" + Math.round(2.5));// 輸出3 ?????? System.out.println("四舍五入:" + Math.round(1.8));// 輸出2
?????? /* ?????? ?* 10.其他 ?????? ?*/ ?????? // copySign(x,y) 返回 用y的符號取代x的符號后新的x值 ?????? System.out.println("符號拷貝:" + Math.copySign(-1.0, 2.0));// 輸出1.0 ?????? System.out.println("符號拷貝:" + Math.copySign(2.0, -1.0));// 輸出-2.0
?????? // nextAfter(a,b) 返回(a,b)或(b,a)間與a相鄰的浮點數 b可以比a小。b是控制條件 ?????? System.out.println("與a相鄰的浮點數:" + Math.nextAfter(1.2, 2.7));//輸出1.2000000000000002 ?????? System.out.println("與a相鄰的浮點數:" + Math.nextAfter(1.2, -1));//輸出1.1999999999999997
?????? // nextUp(a) 返回比a大一點點的浮點數 ?????? System.out.println("大一點點的浮點數" + Math.nextUp(1.2));// 輸出1.2000000000000002
?????? // nextDown(a) 返回比a小一點點的浮點數 ?????? System.out.println("小一點點的浮點數" + Math.nextDown(1.2));// 輸出1.1999999999999997 ??? } } |
- 贊