数字操作助手类


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值