数字操作助手类

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

你可能感兴趣的:(.net,算法,Blog,UP)