java写了一个金额转大写程序,最大值到千亿,保留2位小数
经初步测试结果正确,不过写法好像比较笨,请各位大侠指教
功能满足:
1. 金额为整数时,只表示整数部分,后面加“整”
2. 连续的“0”,只写一个“零”
3. 整数后尾数0省略,如100表示成“壹佰元整”
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Scanner;
/*
* 1. 金额为整数时,只表示整数部分,后面加“整”
2. 连续的“0”,只写一个“零”
3. 整数后尾数0省略,如100表示成“壹佰元整”
4. 四舍五入到分
5. 最大范围到千亿(12位)
*/
public class MoneyToUppercase {
static HashMap<Integer, String> hm = new HashMap<Integer, String>();
static String toUpper(String num){
hm.put(0, "零");
hm.put(1, "壹");
hm.put(2, "贰");
hm.put(3, "叁");
hm.put(4, "肆");
hm.put(5, "伍");
hm.put(6, "陆");
hm.put(7, "柒");
hm.put(8, "捌");
hm.put(9, "玖");
hm.put(10, "拾");
hm.put(100, "佰");
hm.put(1000, "仟");
hm.put(10000, "万");
String snum = num;
String intpart =null;
String decpart = null;
String dec0 = null;
String dec1 = null;
String hasdec = null;
String[] sa = new String[2];
sa = snum.split("\\.");
intpart = sa[0];
decpart = sa[1];
String[] sint = intpart.split(""); //整数部分
switch(sint.length){
case 2: snum = hm.get(Integer.parseInt(sint[1])); break;
case 3: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) + hm.get(Integer.parseInt(sint[2])); break;
case 4: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) + hm.get(Integer.parseInt(sint[2])) + hm.get(10) + hm.get(Integer.parseInt(sint[3]));break;
case 5: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) + hm.get(Integer.parseInt(sint[2])) + hm.get(100) + hm.get(Integer.parseInt(sint[3])) + hm.get(10) + hm.get(Integer.parseInt(sint[4]));break;
case 6: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10000) + hm.get(Integer.parseInt(sint[2])) + hm.get(1000) + hm.get(Integer.parseInt(sint[3])) + hm.get(100) + hm.get(Integer.parseInt(sint[4])) + hm.get(10) + hm.get(Integer.parseInt(sint[5]));break;
case 7: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) +hm.get(Integer.parseInt(sint[2])) + hm.get(10000) + hm.get(Integer.parseInt(sint[3])) + hm.get(1000) + hm.get(Integer.parseInt(sint[4])) + hm.get(100) + hm.get(Integer.parseInt(sint[5])) + hm.get(10) + hm.get(Integer.parseInt(sint[6]));break;
case 8: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) +hm.get(Integer.parseInt(sint[2])) + hm.get(10) +hm.get(Integer.parseInt(sint[3])) + hm.get(10000) + hm.get(Integer.parseInt(sint[4])) + hm.get(1000) + hm.get(Integer.parseInt(sint[5])) + hm.get(100) + hm.get(Integer.parseInt(sint[6])) + hm.get(10) + hm.get(Integer.parseInt(sint[7]));break;
case 9: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) +hm.get(Integer.parseInt(sint[2])) + hm.get(100) +hm.get(Integer.parseInt(sint[3])) + hm.get(10) +hm.get(Integer.parseInt(sint[4])) + hm.get(10000) + hm.get(Integer.parseInt(sint[5])) + hm.get(1000) + hm.get(Integer.parseInt(sint[6])) + hm.get(100) + hm.get(Integer.parseInt(sint[7])) + hm.get(10) + hm.get(Integer.parseInt(sint[8]));break;
case 10: snum = hm.get(Integer.parseInt(sint[1])) + "亿" + hm.get(Integer.parseInt(sint[2])) + hm.get(1000) +hm.get(Integer.parseInt(sint[3])) + hm.get(100) +hm.get(Integer.parseInt(sint[4])) + hm.get(10) +hm.get(Integer.parseInt(sint[5])) + hm.get(10000) + hm.get(Integer.parseInt(sint[6])) + hm.get(1000) + hm.get(Integer.parseInt(sint[7])) + hm.get(100) + hm.get(Integer.parseInt(sint[8])) + hm.get(10) + hm.get(Integer.parseInt(sint[9]));break;
case 11: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(10) + hm.get(Integer.parseInt(sint[2])) + "亿" + hm.get(Integer.parseInt(sint[3])) + hm.get(1000) +hm.get(Integer.parseInt(sint[4])) + hm.get(100) +hm.get(Integer.parseInt(sint[5])) + hm.get(10) +hm.get(Integer.parseInt(sint[6])) + hm.get(10000) + hm.get(Integer.parseInt(sint[7])) + hm.get(1000) + hm.get(Integer.parseInt(sint[8])) + hm.get(100) + hm.get(Integer.parseInt(sint[9])) + hm.get(10) + hm.get(Integer.parseInt(sint[10]));break;
case 12: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(100) + hm.get(Integer.parseInt(sint[2])) + hm.get(10) + hm.get(Integer.parseInt(sint[3])) + "亿" + hm.get(Integer.parseInt(sint[4])) + hm.get(1000) +hm.get(Integer.parseInt(sint[5])) + hm.get(100) +hm.get(Integer.parseInt(sint[6])) + hm.get(10) +hm.get(Integer.parseInt(sint[7])) + hm.get(10000) + hm.get(Integer.parseInt(sint[8])) + hm.get(1000) + hm.get(Integer.parseInt(sint[9])) + hm.get(100) + hm.get(Integer.parseInt(sint[10])) + hm.get(10) + hm.get(Integer.parseInt(sint[11]));break;
case 13: snum = hm.get(Integer.parseInt(sint[1])) + hm.get(1000) + hm.get(Integer.parseInt(sint[2])) + hm.get(100) + hm.get(Integer.parseInt(sint[3])) + hm.get(10) + hm.get(Integer.parseInt(sint[4])) + "亿" + hm.get(Integer.parseInt(sint[5])) + hm.get(1000) +hm.get(Integer.parseInt(sint[6])) + hm.get(100) +hm.get(Integer.parseInt(sint[7])) + hm.get(10) +hm.get(Integer.parseInt(sint[8])) + hm.get(10000) + hm.get(Integer.parseInt(sint[9])) + hm.get(1000) + hm.get(Integer.parseInt(sint[10])) + hm.get(100) + hm.get(Integer.parseInt(sint[11])) + hm.get(10) + hm.get(Integer.parseInt(sint[12]));break;
}
snum += "元";
snum = snum.replaceAll("零仟", "");
snum = snum.replaceAll("零佰", "零");
snum = snum.replaceAll("零拾", "");
snum = snum.replaceAll("零零亿", "亿");
snum = snum.replaceAll("零亿", "亿");
snum = snum.replaceAll("零零万", "万");
snum = snum.replaceAll("零万", "万");
snum = snum.replaceAll("亿万", "亿");
snum = snum.replaceAll("零零元", "元");
snum = snum.replaceAll("零元", "元");
if(snum.startsWith("元"))
snum="零" + snum;
// System.out.println(snum);
String[] sdec = decpart.split(""); //小数部分
if(sdec[1].equals("0")&&sdec[2].equals("0"))
{
hasdec = "整";
snum += hasdec;
}
else{
if(sdec[1].equals("0"))
dec0 = "零";
else dec0 = hm.get(Integer.parseInt(sdec[1])) + "角";
if(sdec[2].equals("0"))
dec1 = "";
else dec1 = hm.get(Integer.parseInt(sdec[2])) + "分";
snum += dec0+dec1;
}
return snum;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Input a number less than 1000000000000:");
double num = new Scanner(System.in).nextDouble();
if(num>=1e12){
System.out.println("Out of range!");
}else if(num<0) System.out.println("Nagative number");
else{
String snum = new DecimalFormat("0.00").format(num);//四舍五入保留两位小数
System.out.println(snum);
String result = MoneyToUppercase.toUpper(snum);
System.out.println(result);
}
}
}
分享到:
相关推荐
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
根据给定的文件信息,我们可以总结出以下有关“Java金额转大写”的知识点: ### 一、背景介绍 在财务处理、票据填写等场景中,经常需要将阿拉伯数字表示的金额转换为汉字大写形式。这不仅可以提高正式文档的专业性...
在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...
java金额转换小程序
根据给定的信息,本文将详细解释一个Java程序如何实现金额数字到大写金额的转换功能。此程序的主要目的是为了在财务、会计等场景下能够准确地将数字形式的金额转换成汉字大写形式,这对于正式文件如发票、合同等非常...
本节将详细探讨如何用Java编程语言实现一个精确到角的中文大写转小写数字的程序。 首先,我们需要了解中文大写数字与阿拉伯数字的对应关系: 1. 零:零 2. 一:壹 3. 二:贰 4. 三:叁 5. 四:肆 6. 五:伍 7. 六:...
Java程序实现数字金额转为大写中文金额,是一项常见的编程任务,尤其在金融行业以及需要处理财务数据的软件中应用广泛。其核心功能是将阿拉伯数字表示的金额转换成中文大写形式,以满足财务凭证、支票、合同等文档中...
总结来说,"js金额小写转大写脚本"涉及的是JavaScript对财务数字的格式化处理,而FTP下载程序和Java则是网络文件传输和服务器端编程的范畴。这两个主题虽然在实际工作中可能会结合使用,但它们各自代表了编程的不同...
看到网上有很多这样的例子程序,不过觉得很不满意。... * 序我没有用什么很精妙的算法,不过用了一些Java类库中的类,像是正则表达式之类 * 的东西。由于本人对算法不怎么在行,在做转换操作的时候用的是很笨的方法
人民币小写转大写JAVA程序 本文档主要讲解了使用JAVA程序将人民币小写转换为大写的实现方法。该程序使用了BigDecimal类型来处理金额,并使用String数组来存储中文数字和单位。 知识点1:BigDecimal类型在JAVA中的...
Java中关于金额小写转换为大写的工具类
对于给定的“数字金额转大写金额.exe”程序,这可能是一个独立的工具或者应用,用于快速将用户输入的数字转换成大写的人民币金额。用户只需要输入数字,程序会自动处理转换,并将结果复制到剪贴板,方便用户在需要的...
在Java编程语言中,开发一个GUI(图形用户界面)应用程序,用于将人民币金额转换成大写,是一项常见的任务,尤其在财务系统或者银行应用中。这个功能有助于避免因数字输入错误引发的潜在问题,因为汉字的大写金额比...
本文介绍了如何使用Java实现小写数字到中文大写金额的转换,重点讲解了核心算法逻辑及其在代码中的实现方式。这种方法不仅适用于日常开发中常见的金额转换需求,而且能够支持万亿级别的高精度转换,具有广泛的实用...
在IT领域,尤其是在财务软件开发、数据处理以及会计...总的来说,小写数字转换大写数字是信息技术与财务业务结合的一个典型应用场景,通过理解和掌握这些规则,我们可以编写出高效、准确的转换程序,满足各种实际需求。
在Java编程中,将阿拉伯数字转化为中文金额大写是一项常见的任务,特别是在财务系统或报表生成中。这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。...
总的来说,“人民币金额小写转换大写”的实现涉及了字符串操作、字符映射、循环和条件判断等基本编程概念,是Java编程中的一个实用技巧,尤其在处理财务数据时非常有用。通过阅读和理解`TransformMoney.java`的代码...
接下来,我们将详细探讨如何通过Java代码实现数字到大写金额的转换。 首先,我们要创建一个类,例如命名为`ChangeChineseCurrency`,其中包含一个`main`方法作为程序的入口点。在这个方法中,我们声明了一些关键...
这个题目描述了一个简单的Java程序设计实验,其目的是将输入的浮点数值转换成中文金额的大写形式。以下是该实验涉及的主要知识点: 1. **基本数据类型与控制流程**: - 在Java中,`Scanner`类用于从用户那里获取...