java写了一个金额转大写程序,最大值到千亿,保留2位小数
经初步测试结果正确,不过写法好像比较笨,请各位大侠指教
功能满足:
1. 金额为整数时,只表示整数部分,后面加“整”
2. 连续的“0”,只写一个“零”
3. 整数后尾数0省略,如100表示成“壹佰元整”
Java代码
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);
}
}
}
分享到:
相关推荐
此程序能够处理的金额范围最大支持到“仟万亿”,即16位整数,同时还能处理带有两位小数的情况。 #### 主要特点与限制 1. **最大支持金额:** - 最大支持金额为“百万亿”(15位整数,2位小数),或者“仟万亿”...
Java是一种开源的编程语言,其最大的特点之一就是可移植性,即“Write Once, Run Anywhere”(一次编写,到处运行)。这意味着Java程序可以在不同的操作系统上,如Windows、Mac、Linux等,通过Java虚拟机(JVM)实现...
在给定的例子中,`String.format("最大:%-5.2f,最小:%-5.2f", a, b)`将确保最大值和最小值以5位数字显示,其中包含2位小数,并且向左对齐。 总的来说,Java面试中的常见问题涵盖了基本语法、程序流程控制和I/O操作...
例如`goto`就是一个典型的保留字,尽管它当前并未被Java语言使用,但在将来可能成为关键字的一部分。 #### 标识符 - **定义**:标识符是指在Java中用于命名变量、方法、类、包等的名称。 - **组成规则**:标识符...
在这种编码方式中,每一位二值代码的1都代表一个固定的十进制数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。 ##### B: 通过8421码的方式进行二进制和十进制的相互转换 - 示例:求65...
本篇复习总结主要涵盖了Java编程的基础知识,包括编写第一个Java程序、数据类型、变量、运算符、类型转换以及控制流程中的条件判断。 首先,让我们从如何编写Java的第一个程序开始。"Hello World"是每个程序员的...
与整数类型不同,浮点类型在不同平台上的表示可能会有所不同,但Java保证了它们的最小和最大值是固定的。 在编程实践中,选择合适的类型至关重要。例如,boolean用于逻辑判断,char适合处理单个字符,如ASCII码,而...
`super`是一个保留字,不能用作标识符。 #### 2. 再次验证合法标识符 - **题目**: 如下哪个是 Java 中的标识符? - A、fieldname - B、super - C、3number - D、#number - **正确答案**: A、fieldname - **解析...
- 达到最大值或最小值的数据。 3. **错误数据:** - 不符合预期或非法的数据。 #### 六、数组 **定义:** - 数组是一种存储同类型多个变量的容器,每个变量称为元素,其位置称为索引。 **初始化方式:** 1. **...
例如,在 `int` 类型上进行加法操作时,如果结果超过了 `int` 类型的最大值 (`2^31 - 1`),则会发生溢出。此时,结果将“环绕”回最小值 (`-2^31`) 并继续增加。 ##### 2.1.5 显示默认初始值 在Java中,可以通过...
11. **整除关系判断**:使用逻辑运算符检查一个数是否能被5、6整除,或者能被5或6整除但不能同时被5和6整除。 12. **复利计算**:根据复利公式,用循环计算未来的价值。 13. **数组排序**:可以使用内置的Arrays....
在Java中,整型运算可能会导致溢出,比如当一个int值超过其最大值(Integer.MAX_VALUE)时,会向负数方向溢出。例如: ```java int maxValue = Integer.MAX_VALUE; int minValue = Integer.MIN_VALUE; System.out....
- **类名**:首字母大写,多个单词组成的类名使用驼峰命名法(Camel Case),即除了第一个单词之外的每个单词首字母大写。 - **方法名和变量名**:与类名类似,但首字母小写。 #### 八、对象比较 - **equals()方法...
`byte` 的最大值是 127,`short` 的最大值是 32767,`float` 和 `double` 分别占用4和8个字节。在转换数据类型时,如从 `byte` 赋值给 `int`,不需要特殊声明。 4. **变量**:变量是存储数据的容器,必须先声明后...
Java 是一种广泛使用的编程语言,常用于开发企业级应用程序,而 Oracle 是一个大型的关系型数据库管理系统 (RDBMS)。两者结合使用,可以构建高效、可靠的数据驱动应用。 在 Oracle 数据库中,TCL(Transaction ...
- Java区分大小写,即`Variable`与`variable`被视为两个不同的标识符。 - 在实际编程过程中,推荐使用“见名知意”的命名方式,使得代码更易阅读和理解。 2. **命名规范**: - **类名和接口名**:采用大写字母...
例如,`int`类型的默认初始值是0,最大值约为20亿。溢出问题发生在计算超出了数据类型能表示的最大值时,如题目中的`long l = 100000 * 100000 * 100000`会导致结果为负数,这是因为计算过程中超过了`int`的范围。...