public class NumberHelper {
private static Log logger = LogFactory.getLog(NumberHelper.class);
/**
* 将源数字格式化为指定的长度,不足的位数在前面补零,如果长度小于源数字的长度返回原始数字
* 适用于在产生指定长度的流水号时使用
*
* @param source
* @return
*/
public static String number2char(int source, int length) {
try{
String module = new String();
for (int i=0; i<length; i++){
module += "0";
}
DecimalFormat format = new DecimalFormat(module);
return format.format(source);
} catch (Exception e){
logger.error("源数字或指定长度非法", e);
e.printStackTrace();
return null;
}
}
/**
* 将百分比格式化为数字表示,默认使用四舍五入的算法不舍去小数位数
*
* @param source 百分比格式的数字
* @return
*/
public static Double percent2number(double source){
try{
BigDecimal big = new BigDecimal(source);
return big.divide(new BigDecimal(100)).doubleValue();
} catch (Exception e){
logger.error("将百分比格式化为数字表示出现错误", e);
e.printStackTrace();
return null;
}
}
/**
* 将百分比格式化为数字表示,默认使用四舍五入的算法并保留指定位数的小数
*
* @param source 百分比格式的数字
* @param length 小数位数
* @return
*/
public static double percent2number(double source, int length){
try{
BigDecimal big = new BigDecimal(source);
return big.divide(new BigDecimal(100), length, RoundingMode.HALF_UP).doubleValue();
} catch (Exception e){
logger.error("将百分比格式化为数字表示出现错误", e);
e.printStackTrace();
return 0;
}
}
/**
* 将两个数字相除并返回百分格式
*
* @param dividend 被除数
* @param divisor 除数
* @return 带%号的字符串
*/
public static String divide2Percent(int dividend, int divisor){
return number2percent(divide(dividend, divisor));
}
/**
* 将数字格式化为百分比表示
*
* @param source
* @return
*/
public static String number2percent(double source){
try{
DecimalFormat format = new DecimalFormat("#.##%");
return format.format(source);
} catch (Exception e){
logger.error("将数字格式化为百分比表示出现错误", e);
e.printStackTrace();
return null;
}
}
/**
* 两个整数相除保留两位小数
*
* @param dividend 被除数
* @param divisor 除数
* @return
*/
public static Double divide(int dividend, int divisor){
return divide(dividend, divisor, 2);
}
/**
* 两个整数相除保留指定位数的小数
*
* @param dividend 被除数
* @param divisor 除数
* @param length 保留小数位数的长度
* @return
*/
public static Double divide(int dividend, int divisor, int length){
try{
if (dividend == 0){
return 0D;
}
BigDecimal big = new BigDecimal(divisor);
double d = big.divide(new BigDecimal(dividend), length, RoundingMode.HALF_UP).doubleValue();
return d;
} catch (Exception e){
logger.error("数字相除发生错误", e);
e.printStackTrace();
return null;
}
}
/**
* 将double数据保留指定位数的小数
* @param length 保留小数位数的长度
* @return
*/
public static Double divide(double source, int length){
try{
if (source == 0){
return 0D;
}
BigDecimal big = new BigDecimal(source);
double d = big.setScale(length, RoundingMode.HALF_UP).doubleValue();
return d;
} catch (Exception e){
logger.error("保留指定位数的小数发生错误", e);
e.printStackTrace();
return null;
}
}
/**
* 将double数据保留指定位数的小数
* @param length 保留小数位数的长度,小数位数不够,以0补全。
* 支持科学计算法
* @return
*/
public static String divideToString(double source, int length){
BigDecimal big = new BigDecimal(source);
return big.setScale(length, RoundingMode.HALF_UP).toString();
}
/**
* 将String数据保留指定位数的小数
* @param length 保留小数位数的长度,小数位数不够,以0补全。
* 支持科学计算法
* @return
*/
public static String divideToString(String source, int length){
BigDecimal big = new BigDecimal(source);
return big.setScale(length, RoundingMode.HALF_UP).toString();
}
public static void main(String[] args){
System.out.print(divideToString("1.23E4",5));
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoping8411/archive/2010/04/02/5446335.aspx
数字操作助手类
最新推荐文章于 2024-08-31 15:34:19 发布