import java.text.DecimalFormat;
import java.util.Scanner;
/**
* 描述:只能计算到小数点后两位 超过两位直接取整了
* 作者: Mr Yang
* 创建日期: 2020-9-27
* 修改记录:
*/
public class ConvertMoney {
private static final String STR_UNIT[] = {"","拾","佰","仟","万","拾","佰","仟","亿"};
private static final String STR_NUMBER[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("输入一个金额");
String convert = convert(scan.nextDouble());
System.out.println(convert);
}
public static String convert(double d){
DecimalFormat df = new DecimalFormat("#0.###");
String strNum = df.format(d);
if (strNum.indexOf(".") != -1){ //包含小数点
String num = strNum.substring(0, strNum.indexOf("."));
if (num.length()>12){
System.out.println("数字太大不能转换");
return "";
}
}
String point = "";
if (strNum.indexOf(".")!= -1){
point = "元";
}else {
point = "元整";
}
String result = getInteger(strNum) +point + getDecimal(strNum);
if (result.startsWith("元")){ //判断是否以元开头
result = result.substring(1, result.length()); //把开头的元去掉
}
return result;
}
/**
* 小数点前面部分
* @param num
* @return
*/
public static String getInteger(String num){
if (num.indexOf(".") != -1){
num = num.substring(0, num.indexOf("."));
}
num = new StringBuffer(num).reverse().toString();
StringBuffer temp = new StringBuffer();
for (int i=0; i<num.length(); i++){
temp.append(STR_UNIT[i]);
temp.append(STR_NUMBER[num.charAt(i)-48]);
}
num = temp.reverse().toString();
while (num.indexOf("零零") != -1 || num.indexOf("零佰") != -1 || num.indexOf("零仟") != -1 || num.indexOf("零万") != -1 || num.indexOf("零亿") != -1 || num.indexOf("亿万") != -1 || num.indexOf("零拾") != -1) {
num = numReplace(num, "零拾", "零");
num = numReplace(num, "零佰", "零");
num = numReplace(num, "零仟", "零");
num = numReplace(num, "零万", "万");
num = numReplace(num, "零亿", "亿");
num = numReplace(num, "零零", "零");
num = numReplace(num, "亿万", "亿");
if (num.lastIndexOf("零") == num.length() - 1) {
num = num.substring(0, num.length() - 1);
}
}
return num;
}
public static String numReplace(String num, String oldUnit, String newUnit){
num = num.replaceAll(oldUnit,newUnit);
return num;
}
/**
* 小数点后面部分
* @param num
* @return
*/
public static String getDecimal(String num){
if (num.indexOf(".") != -1){
num = num.substring(num.indexOf(".")+1);
StringBuffer temp = new StringBuffer();
temp.append(STR_NUMBER[num.charAt(0)-48]);
temp.append("角");
if(num.length()!=1) {
temp.append(STR_NUMBER[num.charAt(1) - 48]);
temp.append("分");
}
return temp.toString();
}
return "";
}
}
String类型的金额 转换成大写汉字金额 工具类
最新推荐文章于 2024-08-03 21:02:21 发布