`
hy2012_campus
  • 浏览: 30615 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

实现金额的数字与汉字之间转换

    博客分类:
  • java
 
阅读更多
public class Test {
    private static String[] CH = { "", "", "拾", "佰" , "仟" , "万" , "" , "" , "" , "亿" , "", "" , "" , "兆" };
    private static String[] CHS_NUMBER = { "零", "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒", "捌" , "玖" };

    /**
    * 传入数字金额字符串,返回数字金额对应的中文大字与读法
    * @param money
    *  金额字符串
    * @return 金额中文大写
    */
    public static String getCHSNumber(String money){
       String chs = "";
       String tmp_int = money.substring(0, money.indexOf("."));
       String tmp_down = money.substring(money .indexOf("." )+1);
        char[] tmp_int_char = tmp_int.toCharArray();
       String[] tmp_chs = new String[tmp_int_char.length ];
        int tab = 0;
        for (int i = 0; i < tmp_int_char.length; i++)
       {
           tab = tmp_int_char. length - i - 1;
            if (tmp_int_char.length <= 5)
           {
               tmp_chs[tab] = CHS_NUMBER[(int )Float.parseFloat (tmp_int_char[i] + ".0" )];
                if (!tmp_chs[tab].equals("零" ))
               {
                   // tmp_int_char.Length - i 为数字所在的位数
                  chs = chs + tmp_chs[tab] + CH[tmp_int_char.length - i];
               }
                else
               {
                   // 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
                   if (!chs.endsWith("零" ) && tab != 0)
                  {
                      chs = chs + tmp_chs[tab];
                  }
                   else if (chs.endsWith("零") && tab == 0)
                  {
                      chs = chs.substring(0, chs.length() - 1);
                  }
               }
           }
            //  如果数字的位数大于5和小于9时
            if (tmp_int_char.length > 5 && tmp_int_char.length < 9)
           {
               tmp_chs[tab] = CHS_NUMBER[(int )Float.parseFloat (tmp_int_char[i] + ".0" )];
                // 如:123,1234分成两部分
                // 第1部分123:万以上亿以下
                if (tab >= 4)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 3];
                       //  当第1部分算完时在加上"万"
                       if (tab == 4)
                      {
                          chs = chs + "万";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 4)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                              chs = chs + "万";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                              chs = chs + "万";
                          }
                      }
                  }
               }
                // 如:123,1234分成两部分
                // 第1部分1234:万以下
                if (tab < 4)
               {
                   if (!tmp_chs[tab].equals("零" ))
                  {
                       // tmp_int_char.Length - i 为数字所在的位数
                      chs = chs + tmp_chs[tab] + CH [tmp_int_char.length - i];
                  }
                   else
                  {
                       // 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
                       if (!chs.endsWith("零" ) && tab != 0)
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       if (chs.endsWith("零" ) && tab == 0)
                      {
                          chs = chs.substring(0, chs.length() - 1);
                      }
                  }
               }
           }
            //  如果数字的位数大于5和小于9时
            if (tmp_int_char.length >= 9 && tmp_int_char.length <= 12)
           {
               tmp_chs[tab] = CHS_NUMBER[(int )Float.parseFloat (tmp_int_char[i] + ".0" )];
                if (tab >= 8 && tab < 12)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 7];
                       //  当第1部分算完时在加上"万"
                       if (tab == 8)
                      {
                          chs = chs + "亿";

                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 8)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                              chs = chs + "亿";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                              chs = chs + "亿";
                          }
                      }
                  }
               }
                // 如:123,1234分成两部分
                // 第1部分123:万以上亿以下
                if (tab >= 4 && tab < 8)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 3];
                       //  当第1部分算完时在加上"万"
                       if (tab == 4)
                      {
                          chs = chs + "万";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 4)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                               if (!chs.endsWith("亿" ))
                                 chs = chs + "万";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                               if (!chs.endsWith("亿" ))
                                 chs = chs + "万";
                          }
                      }
                  }
               }
                // 如:123,1234分成两部分
                // 第1部分1234:万以下
                if (tab < 4)
               {
                   if (!tmp_chs[tab].equals("零" ))
                  {
                       // tmp_int_char.Length - i 为数字所在的位数
                      chs = chs + tmp_chs[tab] + CH [tmp_int_char.length - i];
                  }
                   else
                  {
                       // 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
                       if (!chs.endsWith("零" ) && tab != 0)
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       if (chs.endsWith("零" ) && tab == 0)
                      {
                          chs = chs.substring(0, chs.length() - 1);
                      }
                  }
               }
           }
            //  如果数字的位数大于12和小于16时
            if (tmp_int_char.length > 12 && tmp_int_char.length <= 16)
           {
               tmp_chs[tab] = CHS_NUMBER[(int )Float.parseFloat (tmp_int_char[i] + ".0" )];
                if (tab >= 12 && tab < 16)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 11];
                       //  当第1部分算完时在加上"万"
                       if (tab == 12)
                      {
                          chs = chs + "兆";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 12)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                              chs = chs + "兆";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                              chs = chs + "兆";
                          }
                      }
                  }
               }
                if (tab >= 8 && tab < 12)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 7];
                       //  当第1部分算完时在加上"万"
                       if (tab == 8)
                      {
                          chs = chs + "亿";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 8)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                               if (!chs.endsWith("兆" ))
                                 chs = chs + "亿";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                               if (!chs.endsWith("兆" ))
                                 chs = chs + "亿";
                          }
                      }
                  }
               }
                // 如:123,1234分成两部分
                // 第1部分123:万以上亿以下
                if (tab >= 4 && tab < 8)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 3];
                       //  当第1部分算完时在加上"万"
                       if (tab == 4)
                      {
                          chs = chs + "万";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 4)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                               if (!chs.endsWith("亿" ))
                                  if (!chs.endsWith("兆" ))
                                      if (!chs.endsWith("兆" ))
                                         chs = chs + "万" ;
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                               if (!chs.endsWith("亿" ))
                                  if (!chs.endsWith("兆" ))
                                     chs = chs + "万" ;
                          }
                      }

                  }
               }
                // 如:123,1234分成两部分
                // 第1部分1234:万以下
                if (tab < 4)
               {
                   if (!tmp_chs[tab].equals("零" ))
                  {
                       // tmp_int_char.length() - i 为数字所在的位数
                      chs = chs + tmp_chs[tab] + CH [tmp_int_char.length - i];
                  }
                   else
                  {
                       // 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
                       if (!chs.endsWith("零" ) && tab != 0)
                      {
                          chs = chs + tmp_chs[tab];
                      }

                       if (chs.endsWith("零" ) && tab == 0)
                      {
                          chs = chs.substring(0, chs.length() - 1);
                      }
                  }
               }
           }
            //  如果数字的位数大于16
            if (tmp_int_char.length > 16)
           {
               tmp_chs[tab] = CHS_NUMBER[(int )Float.parseFloat (tmp_int_char[i] + ".0" )];
                if (tab >= 12)
               {
                  chs = chs + tmp_chs[tab];
                   //  当第1部分算完时在加上"万"
                   if (tab == 12)
                  {
                      chs = chs + "兆";
                  }
               }
                if (tab >= 8 && tab < 12)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 7];
                       //  当第1部分算完时在加上"万"
                       if (tab == 8)
                      {
                          chs = chs + "亿";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       // 当第1部分算完时
                       if (tab == 8)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                               if (!chs.endsWith("兆" ))
                                 chs = chs + "亿";
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                               if (!chs.endsWith("兆" ))
                                 chs = chs + "亿";
                          }
                      }
                  }
               }
                // 如:123,1234分成两部分
                // 第1部分123:万以上亿以下
                if (tab >= 4 && tab < 8)
               {
                   // 当前数字不是大小零时
                   if (!tmp_chs[tab].equals("零" ))
                  {
                      chs = chs + tmp_chs[tab] + CH [tab - 3];
                       //  当第1部分算完时在加上"万"
                       if (tab == 4)
                      {
                          chs = chs + "万";
                      }
                  }
                   else
                  {
                       // 当前数字为大小"零"时
                       // 判断前一次形成在字符串结尾有没有零
                       //  如果没有零就加上零
                       if (!chs.endsWith("零" ))
                      {
                          chs = chs + tmp_chs[tab];
                      }

                       // 当第1部分算完时
                       if (tab == 4)
                      {
                           //  先判断字符串有没有零
                           //  如果有零时就把零去掉再加上"万"
                           if (chs.endsWith("零" ))
                          {
                              chs = chs.substring(0, chs.length() - 1);
                               if (!chs.endsWith("兆" ))
                                  if (!chs.endsWith("亿" ))
                                     chs = chs + "万" ;
                          }
                           else
                          {
                               //  如果没有零就直接加上"万"
                               if (!chs.endsWith("兆" ))
                                  if (!chs.endsWith("亿" ))
                                     chs = chs + "万" ;
                          }
                      }
                  }
               }

                // 如:123,1234分成两部分
                // 第1部分1234:万以下
                if (tab < 4)
               {
                   if (!tmp_chs[tab].equals("零" ))
                  {
                       // tmp_int_char.length() - i 为数字所在的位数
                      chs = chs + tmp_chs[tab] + CH [tmp_int_char.length - i];
                  }
                   else
                  { // 当数字中有零时就在后加上零,如果超过1个以上的零也只加一个零
                       if (!chs.endsWith("零" ) && tab != 0)
                      {
                          chs = chs + tmp_chs[tab];
                      }
                       if (chs.endsWith("零" ) && tab == 0)
                      {
                          chs = chs.substring(0, chs.length() - 1);
                      }
                  }
               }
           }
       }

        if (tmp_down != null)
       {
            char[] tmp = tmp_down.toCharArray();
            if (tmp.length == 1)
           {
                if (tmp[0] != '0' )
                  chs = chs + "元" + CHS_NUMBER[(int )Float.parseFloat (tmp[0] + ".0")] + "角整" ;
                else
                  chs = chs + "元整";
           }
            else
           {
                if (tmp[1] != '0' && tmp[0] != '0')
               {
                  chs = chs + "元" + CHS_NUMBER[(int )Float.parseFloat (tmp[0] + ".0")] + "角"
                             + CHS_NUMBER[(int )Float.parseFloat (tmp[1] + ".0")] + "分" ;
               }
                else if (tmp[1] != '0' && tmp[0] == '0')
               {
                  chs = chs + "元零" + CHS_NUMBER[(int )Float.parseFloat (tmp[1] + ".0")] + "分" ;
               }
           }
       }
        else
       {
           chs = chs + "元整";
       }
        return chs;
    }
    public static void main(String[] args) {
        /**
        * 出入的数字必须带有小数点,不然会出现异常 精确到分
        */
       String str= "1234.0111";
       String result= getCHSNumber(str);
       System. out.println(result);
    }
}

 

分享到:
评论

相关推荐

    将数字金额转换为中文大写金额

    将数字金额转换为中文大写金额将数字金额转换为中文大写金额将数字金额转换为中文大写金额

    金额阿拉伯数字转换中文大写(全)

    在IT领域,尤其是在财务软件开发或数据处理中,经常需要将阿拉伯数字金额转换为中文大写,以便在财务报表、发票或合同中清晰准确地表示金额。这是因为中文大写数字在金融交易中能减少因书写错误导致的混淆,增强财务...

    将阿拉伯数字转换为汉字数字或者汉字大写金额

    1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...

    C语言成序设计__实现人民币小写金额与大写金额的转换

    在实现转换时,我们需要将小写金额的每一位数字提取出来,并将其转换为对应的大写金额数字。 在C语言中,我们可以使用数组和循环来实现这种转换。我们可以定义两个数组,一个是中文数字数组,另一个是单位数组。...

    金额转换,中文金额转数字金额,数字金额转中文金额

    金额转换,中文金额转数字金额,数字金额转中文金额,中文金额转数字金额从字符串中获取中文大写金额或是数字金额,不支持小数,中文金额不支持混写,如 五千零壹十万元,不支持转换会输出0,字符串可以不用截取,...

    C# - 阿拉伯数字金额转换为繁体数字金额

    要实现这一功能,我们需要理解阿拉伯数字和繁体数字之间的转换规则。阿拉伯数字系统是我们在日常生活中最常用的数字表示法,包括0、1、2、3、4、5、6、7、8、9这十个数字。而繁体数字则有自己独特的汉字对应,例如零...

    oracle 数字金额转为汉字大写

    总结来说,Oracle中将数字金额转换为汉字大写的过程涉及自定义函数的编写,通过映射数字到汉字字符并处理特殊格式要求,可以实现财务领域的规范化表示。`num2rmb`函数提供了一个实用的解决方案,但在实际使用时应...

    数字金额转换为中文汉字金额(plsql function)

    数字金额转换为中文汉字金额:例如select num_to_zhs(123456789.54321) from dual; 我们调用该function可以将金额"123456789.54321"转换为“壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元伍角肆分叁贰壹”。

    金额大写_数字金额转换_

    在进行数字金额转换时,首先要了解数字与汉字之间的对应关系。例如,1到10对应的汉字分别是壹、贰、叁、肆、伍、陆、柒、捌、玖,0和零代表相同,而0通常用于补位。另外,还有个、十、百、千、万、亿等单位的汉字...

    实例006——实现数字金额的中文大写转换.zip

    这个实例006就专注于解决这个问题,即“实现数字金额的中文大写转换”。 在编程中,实现这种转换通常涉及到字符串操作、条件判断以及数字处理。首先,我们需要了解中文大写数字的基本对应关系:0对应"零",1对应"壹...

    Asp.net C# 数字货币金额转换为中英文金额写法

    在Asp.net C#开发中,经常需要处理与货币相关的数据,这包括将数字金额转换成规范的中英文表示方式,以满足财务报告、发票或合同等场景的需求。本资源提供的程序实现了一种高效的方法来完成这个任务。下面将详细阐述...

    数字转换成金额大写

    在IT行业中,尤其是在财务软件开发或者自动化报表系统中,经常需要将数字转换成中文大写的金额形式,以便符合中国的财务规范。"数字转换成金额大写"是一个常见的需求,特别是在Delphi这样的编程环境中。Delphi是一款...

    Java人民币金额数字转换成大写

    Java 人民币金额数字转换成大写 Java 人民币金额数字转换成大写是 Java 面试中最常见的...通过使用 NumberFormat 类和 HashMap 来存储中文数字和人民币金额的对应关系,我们可以轻松地实现人民币金额数字转换成大写。

    js实现将数字转换为中文大写

    这种转换通常在财务相关的软件中很常见,尤其是涉及到金额表述时,为了符合财务规范或增加可读性,需要将数字用中文大写来表示。如标题所示,本文将详细介绍实现该功能的JavaScript代码及其工作原理。 在提供的代码...

    金额汉字数字转换工具

    2. **转换算法**:实现金额汉字数字转换的算法通常包括以下几个步骤: - 防止溢出:确保输入的数字在合理的范围内,例如不超过999999999999999.99。 - 分段处理:将数字拆分为整数部分和小数部分,分别进行转换。 ...

    java将数字转换成大写字母

    Java 中实现数字金额到中文大写字符的转换 Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字...

    汉字金额转换为阿拉伯数字

    在Visual Studio 2008中,这可能涉及到C#或VB.NET语言的编程,可以使用正则表达式进行字符串处理,利用枚举或字典数据结构存储汉字与数字的映射,结合循环和条件语句实现转换逻辑。考虑到效率和可读性,代码应该遵循...

    Ireport实现金额大写(自己实现的)

    本文将详细介绍如何使用Ireport内置的Scriptlet功能实现将金额转换为大写的汉字表示,这对于财务报表的制作尤为重要,因为在中国,金额通常需要以中文大写的形式出现,以增加数据的准确性,防止篡改。 首先,我们要...

    oracle数字转换中文

    例如,在开具发票、合同等正式文档时,通常需要将金额数字转换为中文大写形式,以增加文档的正式性和防止篡改。 #### 实现逻辑解析 在给定的部分内容中,我们可以看到一个名为`money_to_chinese`的函数被创建或...

    mysql函数,将数字金额转成人民币大写

    在`...`部分,你需要填充实现数字到汉字转换的代码,这通常涉及到将数字拆分成整数部分和小数部分,分别处理,然后根据每个位上的数字找到对应的汉字。 2. **字符串处理函数** 如果不创建自定义函数,可以使用...

Global site tag (gtag.js) - Google Analytics