`
kingxianstar
  • 浏览: 20192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

将阿拉伯数值金额转化为中文金额

阅读更多
最近面临着找工作,就经常上网找一些常见的面试题,这次的就是把阿拉伯金额转换为中文的金额,不多说,上代码
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * 将阿拉伯数字金额转换成中文大写数字金额的转换类
 */
public class ConvertToCNMoney {

    /**
     * 将阿拉伯数字金额转换成中文大写数字金额
     * @param money
     * @return
     */
    public static String toCNMoney(double money) {
        //转换成指定格式的数字
        NumberFormat fmt = NumberFormat.getInstance();
        fmt.setMaximumFractionDigits(2);//两位小数
        fmt.setRoundingMode(RoundingMode.HALF_UP);
        fmt.setGroupingUsed(false);//不要千分号

        money = Double.valueOf(fmt.format(money));

        Map<Integer, String> numbersMap = new HashMap<Integer, String>(10);
        String[] section = {"", "萬", "億", "兆"};//拆分为四大块,精确到万亿位,即兆
//      String[] positions = {"拾", "佰", "仟"};
        String[] numbers = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        for (int i = 0; i < numbers.length; i++) {
            numbersMap.put(i, numbers[i]);
        }

        String result = "";
        //1.处理小数位(如果有)
        if (fmt.format(money).contains(".")) {
            int remainder = (int) ((money * 100) % 100);//取余

            int a = remainder / 10;
            if (a != 0) {
                result = numbersMap.get(a) + "角";
            }

            int b = remainder % 10;
            if (b != 0) {
                if (a == 0) {
                    result += numbersMap.get(0) + numbersMap.get(b) + "分";//处理特殊情况,如2.05(贰圆零伍分)
                } else {
                    result += numbersMap.get(b) + "分";
                }
            }
        }

        //2.处理整数位
        long total = (long) (money * 100 / 100);//取整
        if (total == 0) {
            return result.equals("") ? (numbersMap.get(0) + "圆") : result;//少于1元
        }

        int j = 0;
        String tempResult = "";
        do {
            //每次处理四位数
            long t = (total % 10000);
            String str = ConvertToCNMoney.thousandToUpperCase((int) t, numbersMap, null);
            total = total / 10000;
            if (total != 0 && t > 0 && t < 1000) {
                str = numbersMap.get(0) + str;//如果每次处理之后还有万位且前次处理的四位取余t(0<t<1000),则前面应补零
            }
            tempResult = str + section[j] + tempResult;
            j++;
        } while (total != 0);

        //3.最后别忘了金额单位
        result = tempResult + "圆" + result;
        System.out.print(result);
        return result;
    }

    /**
     * 处理千位以内阿拉伯数字金额
     * @param number
     * @param numbersMap
     * @param result
     * @return
     */
    private static String thousandToUpperCase(int number, Map<Integer, String> numbersMap, String result) {
        result = result == null ? "" : result;
        if (number < 10) {
            return number == 0 ? result : (result + numbersMap.get(number));//取出个位
        }
        if (number < 100) {
            result = result + numbersMap.get(number / 10) + "拾";//取出十位
            return thousandToUpperCase(number % 10, numbersMap, result);
        }
        if (number < 1000) {
            result = result + numbersMap.get(number / 100) + "佰";//取出百位
            //处理特殊情况,如201
            if (0 < number % 100 && number % 100 < 10) {
                result += numbersMap.get(0);//加个零
            }
            return thousandToUpperCase(number % 100, numbersMap, result);
        }
        if (number < 10000) {
            result = result + numbersMap.get(number / 1000) + "仟";//取出千位
            //处理特殊情况,如2001,2011
            if (0 < number % 1000 && number % 1000 < 100) {
                result += numbersMap.get(0);//加个零
            }
            return thousandToUpperCase(number % 1000, numbersMap, result);
        }
        return result;
    }
    public static void main(String args[]){
        toCNMoney(12323430100982.2);
    }
}


不过还是有点小问题,想知道自己敲一遍运行下就知道了
分享到:
评论

相关推荐

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

    这个特定的项目“C# - 阿拉伯数字金额转换为繁体数字金额”专注于一个常见的财务处理任务,即把通常用阿拉伯数字表示的货币金额转化为繁体中文的表示方式。这在中文环境中特别有用,因为繁体数字在正式的商业文档和...

    C#中将数字金额转化为大写金额

    ### C#中将数字金额转化为大写金额 在日常财务处理、票据填写等场景中,经常需要将阿拉伯数字表示的金额转换成汉字大写形式,特别是在中国的财务领域中更是如此。这种转换通常是为了确保金额的准确性和防止篡改。...

    java金额转换,阿拉伯数字转换成中国传统形式。

    在Java编程中,将阿拉伯数字转换为中国传统形式的金额表示是一项常见的需求,特别是在财务系统或者银行应用中。这种转换能够使数字更符合中国人的阅读习惯,增加可读性。在这个问题中,我们要处理的是将像...

    小写金额转大写金额(C++)

    本问题涉及的是一个具体的C++程序设计任务:将小写金额转换为大写的中文表示。这个功能在财务软件、银行系统或者会计应用中非常有用,因为它能够帮助确保金额的正确性和规范性。 在中文中,大写金额的表示法与小写...

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

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

    word文档自动转换货币人民币金额大写.doc

    这些域代码主要用于处理数值的计算、格式化以及转化为中文数字表示。以下是对每个部分的解析: 1. `{ SET Data { = { Quote "A{ = { SEQ Z }+1 }" } } }` 这部分设定一个变量Data,它引用了单元格A中的值并加1...

    Qt实现人民币大写

    3. **数字转换**:这是关键步骤,我们需要将输入的数字转换为对应的中文大写形式。可以创建一个二维数组或者哈希表,存储数字与大写字符的对应关系。然后,通过字符串操作,如分割、遍历和替换,将数字字符串转换成...

    易语言金额大写转换工具源码

    例如,数字“123456.78”会转化为中文的大写为“壹拾贰万叁仟肆佰伍拾陆元柒角捌分”。易语言的这个代码示例可以实现这样的转换功能,帮助开发者快速生成符合规范的财务文档。 易语言代码编写例子通常包含以下几个...

    oracle数字转换中文

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

    数字大小写转化的一个东西

    数字大小写转化的核心是将阿拉伯数字转化为汉字大写形式。在中文语境中,这一转化规则有着悠久的历史,并且已经深入人心。例如,在商业交易中,财务人员常将金额数字转化为汉字大写形式,以防止篡改,保障交易的安全...

    金额转换程序java

    此外,这个程序也适用于实际应用,可以帮助用户快速将数值金额转换成符合财务规范的中文表述。 【标签】"金额转换"表明了程序的核心功能,即处理数字金额的转换。在Java中,这通常涉及到数字的格式化,以及创建一个...

    发票报销辅助工具 阿拉伯数字转大写中文数字

    数字解析是将输入的字符串转化为数字,而字符串拼接则涉及到将每个数字对应的中文字符组合成完整的中文数字表示。这样的设计既体现了编程的逻辑性,又保证了用户体验的便捷性。 总的来说,"发票报销辅助工具 阿拉伯...

    大写日期大写金额

    这通常涉及到将日期和货币数值转化为特定格式,以便于财务报告、发票制作或审计目的。以下是对这一主题的详细说明: 1. **日期的大写表示**:在中文环境中,日期的大写表示是为了避免在书面记录中出现数字混淆,...

    金额大写转换(大写转换)

    金额大写转换的核心是将阿拉伯数字(如1、2、3...999,999,999)转化为对应的汉字大写(如壹、贰、叁...玖佰玖拾玖万玖仟玖佰玖拾玖元)。这种转换需要一个数字到汉字的大写映射表,并根据数字的位数来决定汉字的组合...

    阿拉伯数字转换成英文和大写

    标题 "阿拉伯数字转换成英文和大写" 描述的是一个使用 DELPHI 开发的程序,该程序能够将Excel表格中的阿拉伯数字转换为英文和大写的表示形式,特别适用于财务领域,可以保留小数点后两位。这个程序的实现涉及到了...

    小写金额转大写

    在IT行业中,尤其是在财务软件开发或者自动化处理中,经常需要将小写的数字金额转换成大写的汉字金额,以便于财务报告、发票等正式文档的规范书写。VB6(Visual Basic 6)是微软公司推出的一种面向对象的编程语言,...

    大小写金额转换-源码

    {-------------------------------------------------------------------- 货币数字转为为中文大写的组件 Version 1.31 by SNAKEJIAO 2003.4.13简介: 可以转化整数,浮点数,及时间日期型数据 配合别名列表可以进行...

    CONVERT_MONEY.rar_Money_ Money_ Money

    描述中提到的“将以分为单位输入的数值转换为大写汉字形式”是指将小数形式的金额(例如,2500.00代表25元)转化为中文大写的表示方式,如“贰仟伍佰圆整”。这种转换在财务报表、发票和合同等正式文档中非常常见,...

    数字转换成大写数值

    金额转换,阿拉伯数字转换成中国传统形式。 例如:101000001010 转换为 壹仟零壹拾億零壹仟零壹拾圆整。

    js实现完美兼容各大浏览器的人民币大小写相互转换

    2. **数值转换**:使用一个哈希表存储数字0-9的大写表示,通过遍历分割后的单位字符串,将大写数字转回对应的阿拉伯数字。 3. **单位合并**:合并连续的数值,去除多余的零。 4. **拼接结果**:将转换完成的各个数值...

Global site tag (gtag.js) - Google Analytics