`
Ronald9
  • 浏览: 4546 次
  • 性别: Icon_minigender_1
  • 来自: 火星
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java写了一个金额转大写程序,最大值到千亿,保留2位小数

阅读更多
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);  
            }  
        }  
          
    } 
分享到:
评论

相关推荐

    人民币小写金额转大写金额(java版)

    此程序能够处理的金额范围最大支持到“仟万亿”,即16位整数,同时还能处理带有两位小数的情况。 #### 主要特点与限制 1. **最大支持金额:** - 最大支持金额为“百万亿”(15位整数,2位小数),或者“仟万亿”...

    java笔记,记笔avaj

    Java是一种开源的编程语言,其最大的特点之一就是可移植性,即“Write Once, Run Anywhere”(一次编写,到处运行)。这意味着Java程序可以在不同的操作系统上,如Windows、Mac、Linux等,通过Java虚拟机(JVM)实现...

    java面试试题<二>

    在给定的例子中,`String.format("最大:%-5.2f,最小:%-5.2f", a, b)`将确保最大值和最小值以5位数字显示,其中包含2位小数,并且向左对齐。 总的来说,Java面试中的常见问题涵盖了基本语法、程序流程控制和I/O操作...

    JAVA语言学习笔记之02

    例如`goto`就是一个典型的保留字,尽管它当前并未被Java语言使用,但在将来可能成为关键字的一部分。 #### 标识符 - **定义**:标识符是指在Java中用于命名变量、方法、类、包等的名称。 - **组成规则**:标识符...

    Java学习笔记0711

    在这种编码方式中,每一位二值代码的1都代表一个固定的十进制数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。 ##### B: 通过8421码的方式进行二进制和十进制的相互转换 - 示例:求65...

    Java复习总结.pdf

    本篇复习总结主要涵盖了Java编程的基础知识,包括编写第一个Java程序、数据类型、变量、运算符、类型转换以及控制流程中的条件判断。 首先,让我们从如何编写Java的第一个程序开始。"Hello World"是每个程序员的...

    Java基本数据类型[参考].pdf

    与整数类型不同,浮点类型在不同平台上的表示可能会有所不同,但Java保证了它们的最小和最大值是固定的。 在编程实践中,选择合适的类型至关重要。例如,boolean用于逻辑判断,char适合处理单个字符,如ASCII码,而...

    《JAVA语言程序设计》期末考试试题及答案3(应考必备题库).doc

    `super`是一个保留字,不能用作标识符。 #### 2. 再次验证合法标识符 - **题目**: 如下哪个是 Java 中的标识符? - A、fieldname - B、super - C、3number - D、#number - **正确答案**: A、fieldname - **解析...

    java学习笔记.txt

    - 达到最大值或最小值的数据。 3. **错误数据:** - 不符合预期或非法的数据。 #### 六、数组 **定义:** - 数组是一种存储同类型多个变量的容器,每个变量称为元素,其位置称为索引。 **初始化方式:** 1. **...

    Java 自学宝典 第二章 数据类型

    例如,在 `int` 类型上进行加法操作时,如果结果超过了 `int` 类型的最大值 (`2^31 - 1`),则会发生溢出。此时,结果将“环绕”回最小值 (`-2^31`) 并继续增加。 ##### 2.1.5 显示默认初始值 在Java中,可以通过...

    Java机考200题.pdf

    11. **整除关系判断**:使用逻辑运算符检查一个数是否能被5、6整除,或者能被5或6整除但不能同时被5和6整除。 12. **复利计算**:根据复利公式,用循环计算未来的价值。 13. **数组排序**:可以使用内置的Arrays....

    2-JavaSE之数据类型与运算符1

    在Java中,整型运算可能会导致溢出,比如当一个int值超过其最大值(Integer.MAX_VALUE)时,会向负数方向溢出。例如: ```java int maxValue = Integer.MAX_VALUE; int minValue = Integer.MIN_VALUE; System.out....

    java笔记

    - **类名**:首字母大写,多个单词组成的类名使用驼峰命名法(Camel Case),即除了第一个单词之外的每个单词首字母大写。 - **方法名和变量名**:与类名类似,但首字母小写。 #### 八、对象比较 - **equals()方法...

    java基本概念_选择题.docx

    `byte` 的最大值是 127,`short` 的最大值是 32767,`float` 和 `double` 分别占用4和8个字节。在转换数据类型时,如从 `byte` 赋值给 `int`,不需要特殊声明。 4. **变量**:变量是存储数据的容器,必须先声明后...

    java(oracle).pdf

    Java 是一种广泛使用的编程语言,常用于开发企业级应用程序,而 Oracle 是一个大型的关系型数据库管理系统 (RDBMS)。两者结合使用,可以构建高效、可靠的数据驱动应用。 在 Oracle 数据库中,TCL(Transaction ...

    拓薪教育-java基础语法-任亮.docx

    - Java区分大小写,即`Variable`与`variable`被视为两个不同的标识符。 - 在实际编程过程中,推荐使用“见名知意”的命名方式,使得代码更易阅读和理解。 2. **命名规范**: - **类名和接口名**:采用大写字母...

    复习文档1

    例如,`int`类型的默认初始值是0,最大值约为20亿。溢出问题发生在计算超出了数据类型能表示的最大值时,如题目中的`long l = 100000 * 100000 * 100000`会导致结果为负数,这是因为计算过程中超过了`int`的范围。...

Global site tag (gtag.js) - Google Analytics