数学计算类
Math
用法
主要进行数学计算操作
- 构造方法私有化,所有方法都是静态方法
- 提供的都是基础数学公式,实际需求需要整合操作
Math.cos(0)); // 0度的余弦值
Math.atan(1)); // 1的反正切值
Math.PI; // 圆周率
(int)(a + Math.random()*(b - a + 1)) // 指定范围 a ~ b 随机数公式
public class Test {
private Test(){}
/**
* 实现数据的四舍五入操作
* @param num 要进行四舍五入操作的数字
* @param scale 四舍五入保留的小数位数
* @return 四舍五入处理后的结果
*/
public static double round(double num, int scale) {
return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
}
public static void main(String[] args) {
System.out.println(Test.round(19.86273 ,2));
}
}
方法列表
方法 | 描述 |
---|---|
xxxValue():无参数 | 将Number对象转换为xxx类型的数据并输出 |
compareTo():参数类型:Byte、Double、Integer、Float、Long、Short | 将number对象与参数比较(两个相同类型数据);相等返回0,小于参数返回-1,大于参数返回1 |
equals():参数可为任何对象 | 判断number对象是否与参数相等;相等返回true,否则为false |
valueOf():如果是双参数,第二个为第一个参数的基数表现形式(进制) | 返回一个Number对象指定的内置数据类型 |
toString() | 以字符串形式返回值 |
parseInt():如果是双参数,第二个为第一个参数的基数表现形式(进制) | 将字符串解析为int类型 |
abs() :参数类型:int, float, long, double, short, byte | 返回参数的绝对值 |
ceil() | 返回大于等于(<=)给定参数的double类型最小整数 |
floor() | 返回小于等于(<=)给定参数的double类型最大整数 |
rint() | 返回与参数最接近的double类型整数 |
round() | 四舍五入(Math.floor(x+0.5))即原来数字+0.5向下取整 |
min() | 返回两个参数中的最小值 |
max() | 返回两个参数中的最大值 |
exp() | 返回自然数底数e的参数次方 |
log() | 返回参数的自然数底数的对数值 |
pow() | 返回第一个参数的第二个参数次方 |
sqrt() | 求参数的算数平方根 |
sin() | 求指定double类型参数的正弦值 |
cos() | 求指定double类型参数的余弦值 |
tan() | 求指定double类型参数的正切值 |
asin() | 求指定double类型参数的反正弦值。 |
acos() | 求指定double类型参数的反余弦值。 |
atan() | 求指定double类型参数的反正切值。 |
atan2() | 将笛卡尔坐标转换为极坐标,并返回极坐标角度值 |
toDegrees() | 将参数转换为角度 |
random() | 返回一个随机数;范围0.0 <= R <1.0 |
近似值
- floor、round和ceil取值
参数 | Math.floor | Math.ceil | Math.round |
---|---|---|---|
1.4 | 1 | 2 | 1 |
1.5 | 1 | 2 | 2 |
1.6 | 1 | 2 | 2 |
-1.4 | -2 | -1 | -1 |
-1.5 | -2 | -1 | -1 |
-1.6 | -2 | -1 | -2 |
Random
-
生成随机数
public int nextInt(int bound){}
- 随机生成不大于bound的随机正整数
- 范围:[0, bound)
-
Math.random() 也可以生成随机数
- 范围 [0, 1);取不到1
- 返回指定范围a~b随机数公式
- (int)(a + Math.random()*(b - a + 1))
import java.util.Random;
/**
生成随机数
*/
public class Test{
public static void main(String[] args) {
Random random = new Random();
int a = random.nextInt(100); // 数字在 0 ~ 100 之间,但取不到 100
System.out.println(a);
}
}
运行结果:
19 //0 <= a < 100
BigDecimal、BigInteger
-
大数字计算类,实现海量数字的计算
- 继承
Number
类
- 继承
-
BigInteger
类构造public BigInteger(String val);
- 不能接收 int
-
BigDecimal
类构造public BigDecimal(String val);
public BigDecimal(doublee val);
public BigDecimal(BigInteger val);
-
BigDecimal
与Math
Math
的处理使用的都是基本数据类型,性能高于大数字处理类
-
计算时没有超过基本数据类型包含的位数强烈不建议使用大数字处理类方法
- 使用需要考虑性能问题,消耗很大
-
BigInteger
和BigDecimal
方法类似- 但在
BigDecimal
中有数据进位问题
/** * BigInteger的基础运算操作 */ public class Test { public static void main(String[] args) throws Exception { BigInteger bigA = new BigInteger("234134234234234234"); BigInteger bigB = new BigInteger("23423423"); System.out.println("加法操作:" + bigA.add(bigB)); System.out.println("减法操作:" + bigA.subtract(bigB)); System.out.println("乘法操作:" + bigA.multiply(bigB)); System.out.println("除法操作:" + bigA.divide(bigB)); BigInteger result[] = bigA.divideAndRemainder(bigB); //求余 /* 数组第一个元素为商,第二个为余数 Public BigInteger[] divideAndRemainder(BigInteger val){} */ System.out.println("商:" + result[0] + "、余数:" + result[1]); } }
- 但在
-
BigDecima
除法操作// BigDecimal 除法 public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode); import java.math.BigDecimal; import java.math.RoundingMode; public class Test { private Test() { } /** * 实现数据的四舍五入操作 * @param num 要进行四舍五入操作的数字 * @param scale 四舍五入保留的小数位数 * @return 四舍五入处理后的结果 */ public static double round(double num, int scale) { return new BigDecimal(num).divide(new BigDecimal(1.0), scale, RoundingMode.HALF_UP).doubleValue(); } public static void main(String[] args) throws Exception { BigDecimal bigA = new BigDecimal("32890234890"); BigDecimal bigB = new BigDecimal("1892039"); // 加法计算: 32892126929 System.out.println("加法计算: " + bigA.add(bigB)); BigDecimal result[] = bigA.divideAndRemainder(bigB); // 除法计算: 商 = 17383 余数 = 920953 System.out.println("除法计算: 商 = " + result[0] + "\t余数 = " + result[1]); // 四舍五入: 19.64 System.out.println("四舍五入: " + Test.round(19.6352, 2)); } }