java项目中常用的封装工具类MathUtils

1最大公约数

    public static int GetGCD(int a,int b){
        if(a<0 || b<0){
            return -1;
        }
        if(b==0){
            return a;
        }
        while (a%b!=0){
            int temp = a % b;
            a = b;
            b = temp;
        }
        return b;
    }

2角度值-弧度值

    public static double Angle2Radian(double angle){
       return Math.PI / 180 * angle;
   }
   
	public static float GetAngle(float x, float z) {
		float angle =(float) (Math.atan2(x, z)* (180.0f / Math.PI));
		return angle;
	}

3带溢出处理的安全乘 加

	public static int SafeMulti(int a , int b){
		if(a <= 0 && b <= 0){
			return makeMulti(-a , -b);
		}
		if(a >= 0 && b >= 0){
			if(a == Integer.MAX_VALUE || b == Integer.MAX_VALUE ){
				return Integer.MAX_VALUE;
			}
			if(a == 0 || b == 0){
				return 0;
			}
			if(Integer.MAX_VALUE / a <= b){
				return Integer.MAX_VALUE;
			}
			return a * b;
		}
		return -makeMulti(Math.abs(a), Math.abs(b));
	}
	
	public static long SafeMulti(long a , long b){
		if(a <= 0 && b <= 0){
			return makeMulti(-a , -b);
		}
		if(a >= 0 && b >= 0){
			if(a == Long.MAX_VALUE || b == Long.MAX_VALUE ){
				return Long.MAX_VALUE;
			}
			if(a == 0 || b == 0){
				return 0;
			}
			if(Long.MAX_VALUE / a <= b){
				return Long.MAX_VALUE;
			}
			return a * b;
		}
		return -makeMulti(Math.abs(a), Math.abs(b));
	}
	
	public static int makePlus(int a , int b){
		if(a <= 0 && b <= 0){
			return -makePlus(-a , -b);
		}
		if(a >= 0 && b >= 0){
			if(a == Integer.MAX_VALUE || b == Integer.MAX_VALUE ){
				return Integer.MAX_VALUE;
			}
			if(Integer.MAX_VALUE - a <= b){
				return Integer.MAX_VALUE;
			}
			return a + b;
		}
		return a + b;
	}

4四舍五入保留两位小数

	public static double round(double v) {
		BigDecimal b = new BigDecimal(Double.toString(v));
		BigDecimal one = new BigDecimal("1");
		return b.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

5获取随机数 [ start, end ] 或 [ end, start ]

	public static int getRandomBetween(final int start, final int end, Random random) {

		return end > start ? random.nextInt(end - start + 1) + start : random.nextInt(start - end + 1) + end;
	}

6从集合中获取随机一个

	public static <T> T getRandom(Collection<T> collections) {
		if(collections == null || collections.isEmpty())
			return null;
		
		Object[] os = collections.toArray();
		int index = getRandomBetween(0, os.length -1);
		return (T)os[index];
	}

7从 [min, max]中取出一组不重复的随机数

	public static java.util.List<Integer> getRandomValues(int min, int max, int num) {

		final java.util.List<Integer> list = new java.util.LinkedList<Integer>();
		if (max < 0)
			return list;
		if (num <= 0)
			return list;
		if (max < min)
			return list;

		if (num > (max - min + 1)) {
			num = max - min + 1;
		}

		for (int i = 0; i < num; ++i) {
			int val = getRandomBetween(min, max);
			while (list.contains(val)) {
				val = min + ((val + 1 - min) % (max - min + 1));
			}

			list.add(val);
		}

		return list;
	}

8获得一个不重复的随机序列

	public static int[] getRandomArray(int[] totals, int dest) {

		if (dest <= 0)
			throw new IllegalArgumentException();
		if (dest > totals.length) 
			return totals;
		int[] ranArr = new int[dest];
		for (int i = 0; i < dest; i++) {
			int j = randominstance.nextInt(totals.length - i);
			ranArr[i] = totals[j];
			totals[j] = totals[totals.length - 1 - i];
		}
		return ranArr;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值