java常用数字工具通用类

package com.mypgl.util;
import java.math.BigDecimal;
import java.util.Random;
import java.util.Calendar;
import java.util.ArrayList;
/**
* 此类中封装一些常用的数值类型方法。 所有方法都是静态方法,不需要生成此类的实例, 为避免生成此类的实例,构造方法被申明为private类型的。
*
*
* @author LeeHomshuai
* @serialData 2005/11/19
*/
public class NumberUtil {
/**
* 私有构造方法,防止类的实例化,因为工具类不需要实例化。
*/
private NumberUtil() {
}
private static Random random = new Random();
/**
* 生成随机数,种子为Calendar.DATE时间 (基数+占位符+9位时间)的一个字符串,根据占位符得到不同长度的随机数,最小10位
*
* @author lx_mxin
* @param base基数
* @param placeholder占位符
* @return 基数+占位符+9位时间的长度
*/
public static long toRandomId(int base, int placeholder) {
int nextInt = random.nextInt(1000);
Calendar cal = Calendar.getInstance();
int date = cal.get(Calendar.DATE);
base += placeholder;
long second = date / 1000;
String seed = second + nextInt + "";
seed = seed.substring(1, seed.length());
seed = placeholder + base + seed;
return Long.parseLong(seed);
}
/**
* 精确的除法运算,返回一个商.
*
* @author lx_mxin
* @param dividend除数
* @param divisor被除数
* @param scale保留小数点后几位
* @return 商
*/
public static double div(double dividend, double divisor, int scale) {
if (scale < 0 || divisor == 0)
return 0.00;
BigDecimal b1 = new BigDecimal(dividend);
BigDecimal b2 = new BigDecimal(divisor);
return (b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP)).doubleValue();
}
<!--more-->
/**
* 精确的除法运算,返回一个商的百分比. 有除不尽可能,可选择保留小数点位数
*
* @author lx_mxin and cpxy
* @param dividend除数
* @param divisor被除数
* @param scale保留小数点后几位
* @return 百分比
*/
public static String percent(double dividend, double divisor, int scale) {
String number = null;
if (divisor == 0)
return "0%";
String testStr = String.valueOf(div(dividend, divisor, 2) * 100);
String minDotNumber = testStr.substring(parseDot(testStr), testStr
.length());// 获得小数点后数值
testStr = testStr.substring(0, parseDot(testStr)); // 获得整数数值
if (scale == 0)
return testStr + "%";
minDotNumber = minDotNumber.substring(0, scale + 1);
number = testStr + minDotNumber + "%";
return number;
}
/**
* 生成指定位数随机数字,并返回字符形式,过大会导致机器停止响应
*
* @author cpxy
* @param values指定位数
* @return String 随机的一组字符型数值
*/
public static String toNumberValue(int values) {
String tempValues = "1";
if (values < 0 || values > 10)
values = 0;
for (int i = 1; i < values; i++) {
tempValues = tempValues + "0";
}
int tempInt = Integer.parseInt(tempValues);
tempValues = null;
ArrayList list = new ArrayList();
for (int j = 0; j < tempInt; j++) {
list.add(String.valueOf(j)); // 加载指定位数数值
}
String rs = "";
int tmp = -1;
if (list.size() > 1) {
while (list.size() > 0) {
tmp = random.nextInt(list.size());
rs += list.get(tmp) + ",";
list.remove(tmp);
}
} else {
rs = String.valueOf(random.nextInt(9));
}
return rs;
}
/**
* 根据当前豪秒生成一组随机数,扰乱数越大生成随机数越大
*
* @author cpxy
* @param idByte扰乱数
* @return String 返回随机数数值
*/
public synchronized static String toMillisId(int idByte) {
StringBuffer result = new StringBuffer();
result = result.append(System.currentTimeMillis());
for (int i = 1; i < idByte; i++) {
result = result.append(random.nextInt(9));
}
return result.toString();
}
/**
* 根据数值产生一个指定数值到其倍数之间的随机数
*
* @author cpxy
* @param vals指定启始数值
* @return double 返回随机数数值
*/
public static double toRanValueToDouble(int vals) {
double val = (vals + 1) * Math.random();
val = Math.floor(val) + vals;
return val;
}
/**
* 返回指定数值的阶乘
*
* @author cpxy and lx_mxin
* @param numerical指定启始数值
* @param square指定数值的倍数
* @return int 返回阶乘
*/
public static int doFactorial(int numerical, int multiple) {
if (numerical == 1)
return 1;
if (multiple == 1)
return numerical;
int original = numerical;
for (int i = 1; i < multiple; i++) {
numerical = numerical * original;
}
return numerical;
}
/**
* 返回两个字符串数字的和
*
* @author cpxy and lx_mxin
* @param val1第一个数
* @param val2第二个数
* @return int 和
*/
public static int addStr(String val1, String val2) {
if (checkNumber(val1) == false || checkNumber(val2) == false)
return -1;
BigDecimal b1 = new BigDecimal(val1);
BigDecimal b2 = new BigDecimal(val2);
return b1.add(b2).intValue();
}
/**
* 将给定数值反转输出
*
* @author cpxy
* @param values指定启始数值
* @return 返回反转后数值
*/
public static int doNumberRev(String values) {
if (values.length() == 1)
return Integer.parseInt(values);
String result = values.substring(values.length() - 1, values.length());
result += doNumberRev(values.substring(0, values.length() - 1));
return Integer.parseInt(result);
}
/**
* 将给定字符转化为整型
*
* @author cpxy
* @param values指定启始数值
* @return 返回字符类型
*/
public static int toNumber(String values) {
if (checkNumber(values) == false)
return -1;
return Integer.parseInt(values);
}
/**
* 获得字符串中第一个小数点所在位置(由0开始,想看往后的自己递归)
*
* @author cpxy
* @param values指定数字
* @return 返回小数点位置
*/
public static int parseDot(String values) {
int dot = 0;
for (int i = 0; i < values.length(); i++) {
char ctemp = values.charAt(i);
if (ctemp == ".".charAt(0)) {
dot = i;
break;
}
}
return dot;
}
/**
* 返回数组中数值的平均值
*
* @author cpxy
* @param values指定数组
* @return 返回平均值
*/
public static int toTotal(ArrayList values) {
int total = 0;
if (values.size() > 0) {
for (int i = 0; i < values.size(); i++) {
total += Integer.parseInt(values.get(i).toString());
}
} else
return 0;
return total / values.size();
}
/**
* 检查指定数值是否为数字形式
*
* @author cpxy
* @param str指定数字
* @return boolean 返回布尔类型
*/
public static boolean checkNumber(String str) {
char[] cnum = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
int plength = str.length();
for (int i = 0; i < plength; i++) {
char ctemp = str.charAt(i);
boolean btemp = false;
for (int j = 0; j < cnum.length; j++) {
if (ctemp == cnum[j]) {
btemp = true;
break;
}
}
if (!btemp)
return false;
}
return true;
}
/**
* 计算传入数值的大小(B,KB,MB)
*
* @author cpxy
* @param size整型数值大小
* @return 值+(B,KB,MB)
*/
public static String toMKByte(int size) {
if (size > (1024 * 1024)) {
return ((float) size / (1024 * 1024) + "").substring(0, 4) + "MB";
} else if (size > 1024) {
return ((float) size / 1024 + "").substring(0, 4) + "KB";
} else
return size + "B";
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值