# 金额转大写

```import java.text.DecimalFormat;
import java.util.*;
//@北冥道人骑鲲打代码
public class f2 {
private static String[] numBig = { "零", "壹", "贰", "叁", "肆",  "伍", "陆", "柒", "捌", "玖" };
private static String[] numInt = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };// 整数单位
private static String[] numFloat = { "厘", "分", "角" };// 小数单位

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入金额");
double money = input.nextDouble();

//格式化double数字
DecimalFormat df = new DecimalFormat("#0.###");//此时strNum小数位最多3位
String strNum = df.format(money);
if (strNum.indexOf(".") > 0 ) {//判断是否有小数
String strMoneyInt = strNum.substring(0, strNum.indexOf("."));
if(strMoneyInt.length() > 12){
System.out.println("数字太大了，转换不了");
}else{
System.out.println(getInt(strNum) + "元" + getDouble(strNum));
}
}
else{
if(strNum.length() > 12){
System.out.println("数字太大了，转换不了");
}else{
System.out.println(getInt(strNum) + "元整");
}
}
}

//整数部分
public static String getInt(String str) {
if(str.indexOf(".") != -1){
str = str.substring(0,str.indexOf("."));//截取小数点前面的数字
}
str = new StringBuffer(str).reverse().toString();//反转字符串
StringBuffer strB = new StringBuffer(); //创建一个空的StringBuffer对象
for (int i = 0; i < str.length(); i++){ //把单位添加进去
strB.append(numInt[i]);
strB.append(numBig[(str.charAt(i)-48)]);
//str.charAt(i)-48，这里-48是因为str.charAt(i)-48为ASCII码
//而参照ASCII码：
//ASCII码为 48 ==》0
//ASCII码为 49 ==》1 ...
}
str = strB.reverse().toString();//把反转过的字符串还原

//替换字符串多于的字符
if (str.indexOf("零拾") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零佰") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零仟") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零万") != -1){str = str.replace( "零拾", "万");}
if (str.indexOf("零亿") != -1){str = str.replace( "零拾", "亿");}
if (str.indexOf("零零") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("亿万") != -1){str = str.replace( "零拾", "亿");}

//除去零的结尾
if (str.lastIndexOf("零") == str.length() - 1) {
str = str.substring(0, str.length() - 1);
}
return str;
}

//小数部分
public static String getDouble(String str) {
str = str.substring(str.indexOf(".") + 1);//截取小数点后的数字

//解决单位错位
if(str.length() == 1){str = str +"00";}
else if(str.length() == 2){str = str +"0";}

str = new StringBuffer(str).reverse().toString();//反转字符串
StringBuffer strB = new StringBuffer();//创建一个空的StringBuffer对象
for (int i = 0; i < str.length(); i++) {//把单位添加进去
strB.append(numFloat[i]);
strB.append(numBig[str.charAt(i) - 48]);
}
str = strB.reverse().toString();//把反转过的字符串还原

//替换字符串多于的字符
if (str.indexOf("零角") != -1){str = str.replace( "零角", "零");}
if (str.indexOf("零分") != -1){str = str.replace( "零分", "零");}
if (str.indexOf("零厘") != -1){str = str.replace( "零厘", "零");}
if (str.indexOf("零零") != -1){str = str.replace( "零零", "零");}

//除去零的结尾
if (str.lastIndexOf("零") == str.length() - 1) {
str = str.substring(0, str.length() - 1);
}
return str;
}
}```

0 条评论

• ### Java实现 将数字金额转为大写中文金额

输入数字金额参数，运行程序得到其对应的大写中文金额；例如：输入— 12.56，输出— 12.56:壹拾贰元伍角陆分

• ### 禁止在input中输入中文

提示：设置ime-mode为disabled的意思是禁止在输入时禁止用户激活输入中文，韩文，日文等的输入法（IME）状态，因为这个只能检测到键盘的输入，对通过鼠...

• ### PAT（乙级）1014

这道题目，略显（真TM坑爹，抱歉，我又说脏话了，但是实在不能忍啊！！！）坑爹。题目的意思看起来说的很清楚，实则完全没有说清楚，题目是“横看成岭侧成峰”啊！，但是...

• ### c++中string的常用函数说明

string可以说是是字符数组的升级版，使用更加啊方便，不容易出错。本文对string的常用函数进行简单介绍，做到会用即可。

• ### 使用validator.js对字符串数据进行验证

validator.js是一个对字符串进行数据验证和过滤的工具库，同时支持Node端和浏览器端，github地址是https://github.com/chri...

• ### LeetCode 709. 转换成小写字母

实现函数 ToLowerCase()，该函数接收一个字符串参数 str，并将该字符串中的大写字母转换成小写字母，之后返回新的字符串。

• ### [剑指offer] 字符串的排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,c...

• ### 简单聊聊字符串的翻转问题

字符串的翻转在日常开发使用程度比较少，但是面试过程中却是常有的。最近看php 源码中strrev，因此写一篇文记录对字符串翻转问题的一些学习。

• ### 【leetcode刷题】T90-转换成小写字母

实现函数 ToLowerCase()，该函数接收一个字符串参数 str，并将该字符串中的大写字母转换成小写字母，之后返回新的字符串。