金额转大写

在处理财务账款时,需要将转账金额写成大写的。也就是说,如果要转账123456.00元,则需要写成“壹拾贰万叁仟肆佰伍拾陆元整”。 所以常常需要通过程序控制自动进行转换。本实例实现了小写金额到大写金额的转换。

具体代码如下:

import java.text.DecimalFormat;
import java.util.*;
//@北冥道人骑鲲打代码
public class f2 {
    private static String[] numBig = { "零", "壹", "贰", "叁", "肆",  "伍", "陆", "柒", "捌", "玖" };
    private static String[] numInt = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };// 整数单位
    private static String[] numFloat = { "厘", "分", "角" };// 小数单位
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入金额");
        double money = input.nextDouble();

        //格式化double数字
        DecimalFormat df = new DecimalFormat("#0.###");//此时strNum小数位最多3位 
        String strNum = df.format(money);
        if (strNum.indexOf(".") > 0 ) {//判断是否有小数
            String strMoneyInt = strNum.substring(0, strNum.indexOf("."));
            if(strMoneyInt.length() > 12){
                System.out.println("数字太大了,转换不了");
            }else{
                System.out.println(getInt(strNum) + "元" + getDouble(strNum));
            }
        }
        else{
            if(strNum.length() > 12){
                System.out.println("数字太大了,转换不了");
            }else{
                System.out.println(getInt(strNum) + "元整");
            }
        }
    }
    
    //整数部分
    public static String getInt(String str) {
        if(str.indexOf(".") != -1){
            str = str.substring(0,str.indexOf("."));//截取小数点前面的数字
        }
        str = new StringBuffer(str).reverse().toString();//反转字符串
        StringBuffer strB = new StringBuffer(); //创建一个空的StringBuffer对象
        for (int i = 0; i < str.length(); i++){ //把单位添加进去
            strB.append(numInt[i]);
            strB.append(numBig[(str.charAt(i)-48)]);
            //str.charAt(i)-48,这里-48是因为str.charAt(i)-48为ASCII码
            //而参照ASCII码:
            //ASCII码为 48 ==》0
            //ASCII码为 49 ==》1 ...
        }
        str = strB.reverse().toString();//把反转过的字符串还原

        //替换字符串多于的字符
        if (str.indexOf("零拾") != -1){str = str.replace( "零拾", "零");}
        if (str.indexOf("零佰") != -1){str = str.replace( "零拾", "零");}
        if (str.indexOf("零仟") != -1){str = str.replace( "零拾", "零");}
        if (str.indexOf("零万") != -1){str = str.replace( "零拾", "万");}
        if (str.indexOf("零亿") != -1){str = str.replace( "零拾", "亿");}
        if (str.indexOf("零零") != -1){str = str.replace( "零拾", "零");}
        if (str.indexOf("亿万") != -1){str = str.replace( "零拾", "亿");}

        //除去零的结尾
        if (str.lastIndexOf("零") == str.length() - 1) {
            str = str.substring(0, str.length() - 1);
        }
        return str;
    }
    
    //小数部分
    public static String getDouble(String str) {
        str = str.substring(str.indexOf(".") + 1);//截取小数点后的数字

        //解决单位错位
        if(str.length() == 1){str = str +"00";}
        else if(str.length() == 2){str = str +"0";}

        str = new StringBuffer(str).reverse().toString();//反转字符串
        StringBuffer strB = new StringBuffer();//创建一个空的StringBuffer对象
        for (int i = 0; i < str.length(); i++) {//把单位添加进去
            strB.append(numFloat[i]);
            strB.append(numBig[str.charAt(i) - 48]);
        }
        str = strB.reverse().toString();//把反转过的字符串还原

        //替换字符串多于的字符
        if (str.indexOf("零角") != -1){str = str.replace( "零角", "零");}
        if (str.indexOf("零分") != -1){str = str.replace( "零分", "零");}
        if (str.indexOf("零厘") != -1){str = str.replace( "零厘", "零");}
        if (str.indexOf("零零") != -1){str = str.replace( "零零", "零");}

        //除去零的结尾
        if (str.lastIndexOf("零") == str.length() - 1) {
            str = str.substring(0, str.length() - 1);
        }
        return str;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 字符串中字符出现重复字符

    崔笑颜
  • Java实现 将数字金额转为大写中文金额

    输入数字金额参数,运行程序得到其对应的大写中文金额;例如:输入— 12.56,输出— 12.56:壹拾贰元伍角陆分

    崔笑颜
  • 禁止在input中输入中文

    提示:设置ime-mode为disabled的意思是禁止在输入时禁止用户激活输入中文,韩文,日文等的输入法(IME)状态,因为这个只能检测到键盘的输入,对通过鼠...

    崔笑颜
  • PAT(乙级)1014

    这道题目,略显(真TM坑爹,抱歉,我又说脏话了,但是实在不能忍啊!!!)坑爹。题目的意思看起来说的很清楚,实则完全没有说清楚,题目是“横看成岭侧成峰”啊!,但是...

    zy010101
  • c++中string的常用函数说明

    string可以说是是字符数组的升级版,使用更加啊方便,不容易出错。本文对string的常用函数进行简单介绍,做到会用即可。

    用户2038589
  • 使用validator.js对字符串数据进行验证

    validator.js是一个对字符串进行数据验证和过滤的工具库,同时支持Node端和浏览器端,github地址是https://github.com/chri...

    用户1515472
  • LeetCode 709. 转换成小写字母

    实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

    Michael阿明
  • [剑指offer] 字符串的排列

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,c...

    尾尾部落
  • 简单聊聊字符串的翻转问题

    字符串的翻转在日常开发使用程度比较少,但是面试过程中却是常有的。最近看php 源码中strrev,因此写一篇文记录对字符串翻转问题的一些学习。

    写PHP的老王
  • 【leetcode刷题】T90-转换成小写字母

    实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

    木又AI帮

扫码关注云+社区

领取腾讯云代金券