`

金钱表示转换(阿拉伯数字to汉字)

    博客分类:
  • J2EE
J# 
阅读更多
懒得写小数后的转换了,以后有时间补上

public class MoneyConvent {
    
    //不用String是因为String内部还是char数组,自己用数组用随机查找快一点
    private static final char[] HanChar={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    private static final char[] sbq={'个','拾','佰','仟'};
    private static final char[] wy={'亿','万'};
    
    
    public static String fromArabToCharacter(String arab){
        //预设一个较大的空间存储转换后的汉字序列     
        char[] temp=new char[arab.length()*3];
        int j=0;
        //遍历每一位数字
        for (int i = 0; i < arab.length(); i++) {
            //如果是万位或亿位并且不是零位,有可能要加万或亿字
            if((i%4==0) && i!=0){
                //i能进来说明i只能是4的倍数,wy[(i+1)/4%2]=='亿' 看该数字位数i是否是8的倍数(输出亿) 否则就是4的倍数(有可能输出万)
                if(wy[(i+1)/4%2]=='亿' || !isWanZero(arab, i)){
                    temp[j++]=wy[(i+1)/4%2];
                }
            }
            //如果该位上是0就什么都不加
            if(getHanChar(arab,i)=='零'){
                continue;
            }
            //如果不是4的倍数,就加上相应的 十 百 千
            if((i%4)!=0){
                temp[j++]=sbq[i%4];
            }
            //加上该位上数字的汉字
            temp[j++]=getHanChar(arab,i);
        }
        //转换成StringBuffer后反转序列然后去掉空位加上圆,整数部分就完成了
        StringBuffer sb=new StringBuffer(String.valueOf(temp));
        return sb.reverse().toString().trim()+"圆";
    } 
    
    //需不需要输出万字, 主要看万位到下一个亿位之前是否全是0
    private static boolean isWanZero(String arab,int i){
        if(getHanChar(arab,i)!='零'){
            return false;
        }else if(getHanChar(arab,i+1)!='零'){
            return false;
        }else if(getHanChar(arab,i+2)!='零'){
            return false;
        }else if(getHanChar(arab,i+3)!='零'){
            return false;
        }
        return true;
    }
    
    private static char getHanChar(String arab,int i){
        return HanChar[Integer.parseInt(arab.substring(arab.length()-1-i, arab.length()-i))];
    }
    
    public static void main(String[] args) {
        System.out.println(fromArabToCharacter("65432109876543210"));
        System.out.println(fromArabToCharacter("10200400000000000"));
    }
}

分享到:
评论

相关推荐

    Java将阿拉伯数字转化成汉字金钱

    将阿拉伯数字转化成汉字金钱 如1234.45转化为壹仟贰佰叁拾肆元肆角伍分

    钱的中文和数字转换的js和事例页面

    这个功能的实现可能涉及到将阿拉伯数字(如1, 2, 3等)转化为中文数字(如一、二、三),以及将整数和小数部分分别转换为中文的大写形式,比如“壹佰贰拾叁元肆角伍分”。 描述中提到,"js是定义好的函数,使用...

    大小金额转换.zip

    这个“大小金额转换.zip”压缩包提供了一个实例,展示了如何用C++ Builder 6.0 实现将输入的阿拉伯数字转换为大写汉字表示的金额,这对于财务软件或任何处理金钱表示的系统来说是非常实用的功能。 首先,我们需要...

    金钱大写转小写数字类java(精确到角)

    每个部分都通过查找中文数字在`CHINESE_DIGITS`数组中的位置并乘以相应的单位权重来转换为阿拉伯数字。 在实际项目中,为了提高代码的可维护性和可扩展性,可以将映射表和解析逻辑封装成更独立的组件,例如使用枚举...

    人民币金额转换源代码

    此外,考虑到中国特有的大写金额表示法(如壹、贰、叁等),源代码可能还包含了将阿拉伯数字转换为中文大写的逻辑。这涉及到一个映射表,将数字对应到对应的中文字符,然后拼接成字符串。这部分代码可能具有一定的...

    JAVA竞赛编程题[定义].pdf

    第二个问题是数字的格式化转换,即把阿拉伯数字的金额转换为中文的传统表示方式。`SimpleMoneyFormat`类实现了一个简单的数字到中文货币格式的转换。类中定义了一系列的静态常量,代表了中文数字的各个位值。私有...

    CONVERT_MONEY.rar_Money_ Money_ Money

    这种转换在财务报表、发票和合同等正式文档中非常常见,因为汉字的表达方式可以减少因阿拉伯数字误读或篡改引发的误解。 标签"money _money _money"进一步强调了这个主题的焦点,即与金钱相关的处理。 从压缩包内...

    人民币大写的写法规范-3页.pdf

    3. **阿拉伯数字与中文大写转换的特殊规则**: - 阿拉伯数字中间有“0”时,中文大写应写“零”字,如¥1409.50应写为人民币壹仟肆佰零玖元伍角。 - 连续多个“0”时,中文大写可只写一个“零”字,如¥6007.14应...

    47 人民币小写转大写.rar

    1. 字符映射:首先,你需要创建一个字符映射表,将0-9的阿拉伯数字映射到对应的汉字大写数字,如"零"、"壹"、"贰"等。还需要考虑小数点、单位"元"、"角"、"分"以及"整"(代表没有小数部分)。 2. 数字处理:在接收...

    加解密,金额大写

    其次,金额大写转换在财务软件和银行系统中非常常见,它涉及到将阿拉伯数字转换为中文大写数字,以避免在处理大量金钱时的误解。在Java中,可以编写函数或者使用现有的库来实现这个功能。基本思路是定义一个映射表,...

    senlon实用查询工具大全 v2014 本地数据库版.zip

    万年历查询、手机号码归属地查询、免费在线翻译、手机话费查询、生肖属相查询、黄金价格走势图、股市行情查询、阿拉伯数字译成英文、省市自治区简称、二十四节气表、女性预产期自测、常用电话号码查询、定时关机工具...

Global site tag (gtag.js) - Google Analytics