import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Date;
public class Trans2RMB {
/**
* 测试程序的可行性
*
* @param args
*/
public static void main(String[] args) {
System.out.println("/n--------将数字转换成中文金额的大写形式------------/n");
Trans2RMB t2r = new Trans2RMB();
Date date1 = new Date();// 1001756970138.09//10000138.844//1000000000000.844//1001070000000.09
String s2 = t2r.formatString("134560056008.8");
Date date2 = new Date();
System.out.println((date2.getTime() - date1.getTime()) + "ms");
// 如果转换过后是一个空串,则不输出屏幕
System.out.println("/n---------------------------------------------");
if (!"".equals(s2)) {
System.out.println("转换成中文后为:" + s2);
;
}
System.out.println("/n---------------------------------------------");
System.out.println(formatValue(new BigDecimal(4.025)));
System.out.println(formatValue(new BigDecimal(4.0251)));
}
public static String formatValue(Object value){
String content = null;
if (value == null) {
content = " ";
} else {
if(value instanceof BigDecimal){
//conver to fortmat String
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
content = nf.format(value);
}else{
content = String.valueOf(value);
}
}
return content;
}
/**
* 对传入的数进行四舍五入操作
*
* @param s
* String 从命令行输入的那个数
* @return 四舍五入后的新值
*/
public String formatString(String s) {
// 如果传入的是空串则继续返回空串
if ("".equals(s)) {
return "";
}
if (!checkNum(s))
return "";
// 将这个数转换成 double 类型,并对其进行四舍五入操作,保留两位小数
double d = Double.parseDouble(s);
s = formatDicimalWithFractionDigits(d, 2);
int index = s.indexOf(".");
String intOnly = s.substring(0, index);
// 规定数值的最大长度只能到万亿单位
if (intOnly.length() > 13) {
System.out.println("输入数据过大!(整数部分最多13位!)");
return "";
}
// 这个数的小数部分
String smallOnly = s.substring(index + 1);
String formatString = formatInt(Long.parseLong(intOnly))
+ formatSmall(Integer.parseInt(smallOnly));
return formatString;
}
/**
* 对传入的数进行四舍五入操作,保留fractionDigits位小数
*/
public String formatDicimalWithFractionDigits(double percentage,
int fractionDigits) {
BigDecimal b = new BigDecimal(percentage);
b = b.setScale(fractionDigits, BigDecimal.ROUND_HALF_UP);
return String.valueOf(b);
}
/**
* 根据数字位数获取单位
*
* @param digit
*
* @return 返回单位
*/
public String getNumUnit(int digit) {
String[] num_unit = { "拾", "佰", "仟", "万", "亿" };
String unit = "";
if (digit % 8 == 0 && digit != 0)
unit = num_unit[4];
if ((digit - 4) % 8 == 0 && digit % 8 != 0)
unit = num_unit[3];
if ((digit - 3) % 4 == 0)
unit = num_unit[2];
if ((digit - 2) % 4 == 0)
unit = num_unit[1];
if ((digit - 1) % 4 == 0)
unit = num_unit[0];
return unit;
}
/**
* 对小数点前的数字进行转换
*
* @param num
*
* @return 返回转换后的字符串
*/
public String formatInt(long num) {
String[] chs_num = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String s = "";
for (int i = String.valueOf(num).length() - 1; i >= 0; i--) {
// 取单位数字
int n = (int) (num / Math.pow(10, i));
if (n != 0) {
s += chs_num[n];
s += getNumUnit(i);
}
num = num - n * (long) Math.pow(10, i);
if (i % 4 == 0 && !s.substring(s.length() - 1, s.length()).equals(getNumUnit(i))) {//去除单位重叠情况
if (!(i == 4 && s.substring(s.length() - 1, s.length()).equals(getNumUnit(8))))//去除亿后面出现万的情况
s += getNumUnit(i);
}
if (i - String.valueOf(num).length() == 0 && n == 0 && num != 0) {
s += chs_num[n];
}
}
if (s != "")
s += "元";
return s;
}
/**
* 对小数点后的数字进行转换
*
* @param smallInt
*
* @return 返回转换后的字符串
*/
public String formatSmall(int smallInt) {
if (smallInt == 0)
return "";
String[] chs_num = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String smallString = "";
int firstInt = smallInt / 10;
int secondInt = smallInt % 10;
if (firstInt > 0)
smallString += chs_num[firstInt] + "角";
if (secondInt > 0)
smallString += chs_num[secondInt] + "分";
return smallString;
}
/**
* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符
*
* @param s
* String
* @return 如果用户输入数据合法,返回 true,否则返回 false
*/
public boolean checkNum(String s) {
// 如果用户输入的数里有非数字字符,则视为非法数据,返回 false
try {
float f = Float.valueOf(s).floatValue();
// 如果这个数小于零则视为非法数据,返回 false
if (f < 0) {
System.out.println("非法数据,请检查!");
return false;
} else {
return true;
}
} catch (NumberFormatException e) {
System.out.println("非法数据,请检查!");
return false;
}
}
}
根据阿拉伯数字输出中文读法
最新推荐文章于 2020-11-01 12:08:20 发布