人民币金额转化汉字的java写法
java 版本
原文章
https://www.cnblogs.com/shuilangyizu/p/8976450.html
修改部分代码
例子:200001.00 输出 贰拾万零壹圆整
package com.codefarm.service.utils;
/**
* @ClassName NumToChineseUtil
* @Deacription TODO
* @Author alex
* @Date 2019/12/30 17:15
* @Version 1.0
**/
public class NumToChineseUtil {
private static String[] hangArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private static String[] unitArr = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰" };
private static String[] unitXiaoArr = { "分", "角" };
// 把一个浮点数分为整数和小数
public static String[] divide(double num) {
long zheng = (long) num;
long xiao = Math.round((num - zheng) * 100);
String[] arr = new String[] { String.valueOf(zheng), String.valueOf(xiao) };
return arr;
}
// 把一个4位数转化为汉字
public static String toHantr(double numStr) {
if (numStr < 0) {
System.out.print("请输入一个整数");
}
String[] arr1 = divide(numStr);
// 得到整数部分
String zheng = arr1[0];
// 得到小数部分
String xiao = arr1[1];
String result = "";
// 处理整数部分
int numLen = zheng.length();
for (int i = 0; i < numLen; i++) {
// 得到第i位的数值
int num = zheng.charAt(i) - '0';
// 数值的汉字表示
result += hangArr[num] + unitArr[numLen - 1 - i];
}
// 处理小数部分
int sumLen = xiao.length();
for (int i = 0; i < sumLen; i++) {
if (i > 2)
break;// 只精确到后两位
// 得到第i位的数值
int xnum = xiao.charAt(i) - '0';
// 数值的汉字表示
result += hangArr[xnum] + unitXiaoArr[sumLen - 1 - i];
}
// //替换所有零拾,零百,零仟为零
result = result.replaceAll("零拾", "零");
result = result.replaceAll("零佰", "零");
result = result.replaceAll("零仟", "零");
//把零零替换为零
while(result.indexOf("零零")!=-1){
result = result.replaceAll("零零", "零");
}
result = result.replaceAll("零亿", "亿");
result = result.replaceAll("零万", "万");
result = result.replaceAll("零圆", "圆");
//把零分转为空
result = result.replaceAll("零分", "");
if ("0".equals(xiao)){
result=result.replaceAll("圆", "圆整");
}
return result;
}
public static void main(String[] args) {
System.out.print(toHantr(200001.00));
}
}
c#版
由于项目不同,所以写法不同,功能不同,但是差不多,可能待优化
public string NumtoChinese(decimal s)
{
s = Math.Round(s, 2);//四舍五入到两位小数,即分
double money = decimal.ToDouble(s);
string[] che = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
string[] Units = { "分", "角" };
string[] Grees = { "元", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿", "拾亿" };
Dictionary<string, object> dic = new Dictionary<string, object>();
#region
dic.Add("分", "");
dic.Add("角", "");
dic.Add("元", "");
dic.Add("拾", "");
dic.Add("佰", "");
dic.Add("仟", "");
dic.Add("万", "");
dic.Add("拾万", "");
dic.Add("佰万", "");
dic.Add("仟万", "");
dic.Add("亿", "");
dic.Add("拾亿", "");
#endregion
#region 转换小数前的代码
for (int i = 0; money > 0.99999; i++)
{
int n = (int)(money % 10);
dic[Grees[i]] = che[n];
money = money / 10;
money = money - n / 10;
}
#endregion
#region 转换小数代码
decimal cash = s;
cash = cash * 100;
for (int i = 0; i < 2; i++)
{
int n = (int)(cash % 10);
dic[Units[i]] = che[n];
cash = cash / 10;
}
#endregion
StringBuilder sb = new StringBuilder();
#region
if (!"".Equals(dic["拾亿"]) && !"零".Equals(dic["拾亿"]))
{
sb.Append("" + dic["拾亿"] + "拾亿");
}
if (!"".Equals(dic["亿"]) && !"零".Equals(dic["亿"]))
{
sb.Append("" + dic["亿"] + "亿");
}
if (!"".Equals(dic["仟万"]) && !"零".Equals(dic["仟万"]))
{
sb.Append("" + dic["仟万"] + "仟万");
}
if (!"".Equals(dic["佰万"]) && !"零".Equals(dic["佰万"]))
{
sb.Append("" + dic["佰万"] + "佰万");
}
if (!"".Equals(dic["拾万"]) && !"零".Equals(dic["拾万"]))
{
sb.Append("" + dic["拾万"] + "拾万");
}
if (!"".Equals(dic["万"]) && !"零".Equals(dic["万"]))
{
sb.Append("" + dic["万"] + "万");
}
if (!"".Equals(dic["仟"]) && !"零".Equals(dic["仟"]))
{
sb.Append("" + dic["仟"] + "仟");
}
if (!"".Equals(dic["佰"]) && !"零".Equals(dic["佰"]))
{
sb.Append("" + dic["佰"] + "佰");
}
if (!"".Equals(dic["拾"]) && !"零".Equals(dic["拾"]))
{
sb.Append("" + dic["拾"] + "拾");
}
if (!"".Equals(dic["元"]) && !"零".Equals(dic["元"]))
{
sb.Append("" + dic["元"] + "元");
}
else
{
sb.Append("元");
}
if (!"".Equals(dic["角"]) && !"零".Equals(dic["角"]))
{
sb.Append("" + dic["角"] + "角");
}
if (!"".Equals(dic["分"]) && !"零".Equals(dic["分"]))
{
sb.Append("" + dic["分"] + "分");
}
#endregion
return sb.ToString() ?? "";
}