java math类里的函数

java.math.Math类常用的常量和方法:

Math.PI 记录的圆周率
Math.E记录e的常量
Math.abs 求绝对值
Math.sin 正弦函数 Math.asin 反正弦函数
Math.cos 余弦函数 Math.acos 反余弦函数
Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数
Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度
Math.ceil 得到不小于某数的最大整数
Math.floor 得到不大于某数的最大整数

例如:Math.floor(12.7) =12.0

            Math.ceil(12.7) =13.0

ceil()是天花板,即向上取整。floor是地板,向下取整。round是四舍五入。

 

Math.IEEEremainder 求余
Math.max 求两数中最大
Math.min 求两数中最小
Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常

Math.sqrt(x):平方根
Math.pow(x,y):x的y次方

Math.exp 求e的任意次方
Math.log10 以10为底的对数
Math.log 自然对数
Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)
Math.round 同上,返回int型或者long型(上一个函数返回double型)
Math.random 返回0,1之间的一个随机数

java.math.BigInteger(大整数):
BigInteger bi1=new BigInteger("1234567890123456890");
BigInteger bi2=BigInteger.valueOf(123L);
bi1=bi1.add(bi2);//b1+b2
bi1=bi1.multiply(bi2);//b1*b2
bi1=bi1.subtract(bi2);//b1-b2
bi1=bi1.divide(bi2);// b1/b2

java.math.BigDecimal(大浮点数):
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位

public class MathDemo {
public static void main(String args[]){
/**
* 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

/**
* 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

/**
* max 两个中返回大的值,min和它相反,就不举例了
*/
System.out.println(Math.max(-10.1, -10));//-10.0
System.out.println(Math.max(10.7, 10));//10.7
System.out.println(Math.max(0.0, -0.0));//0.0

/**
* random 取得一个大于或者等于0.0小于不等于1.0的随机数
*/
System.out.println(Math.random());//0.08417657924317234
System.out.println(Math.random());//0.43527904004403717

/**
* 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 四舍五入,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
}
}

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args)
    {
		
			BigDecimal bd1 = new BigDecimal("233.11231231231231");
			BigDecimal bd2 = new BigDecimal("2312123123123.11231");
			BigDecimal bd3 = bd2.divide(bd1);
			bd3 = bd3.setScale(20,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位
			System.out.println(bd3);
    } 
}

这么做会有报错,因为会出现循环除,

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(Unknown Source)

at com.Main.main(Main.java:16)

修改为:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args)
    {
		
			BigDecimal bd1 = new BigDecimal("233.11231231231231");
			BigDecimal bd2 = new BigDecimal("2312123123123.11231");
			BigDecimal bd3 = bd2.divide(bd1, 20, BigDecimal.ROUND_HALF_EVEN);
			bd3 = bd3.setScale(20,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位
			System.out.println(bd3);
    } 
}
设置精度为小数点后20位,

下面是一些关于精度的控制的常量:

static int

ROUND_CEILING

Rounding mode to round towards positive infinity.

向正无穷方向舍入

static int

ROUND_DOWN

Rounding mode to round towards zero.

向零方向舍入

static int

ROUND_FLOOR

Rounding mode to round towards negative infinity.

向负无穷方向舍入

static int

ROUND_HALF_DOWN

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round down.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入,例如1.55保留一位

小数结果为1.5

static int

ROUND_HALF_EVEN

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant,

in which case, round towards the even neighbor.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,

使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

static int

ROUND_HALF_UP

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round up.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位

小数结果为1.6

static int

ROUND_UNNECESSARY

Rounding mode to assert that the requested operation has an exact result, hence no

rounding is necessary.

计算结果是精确的,不需要舍入模式

static int

ROUND_UP

Rounding mode to round away from zero.

向远离0的方向舍入


猜你喜欢

转载自blog.csdn.net/Diaoliangwang/article/details/37579601