`

30行,金额转人民币大写的代码 - 史蒂芬.王

阅读更多
原帖地址:http://www.cnblogs.com/stephen-wang/p/3155958.html

金额转人民币大写是一种常见的要求,但是这一看似简单的要求,实现起来却并不容易。

前不久,我被问到了这样一道题,当时写了个算法,昨天晚上又和BJDP的人们讨论了一下,觉得很有必要把这个算法写下来。

总共36行,去掉空行还不到30行,就不多啰嗦解释了。

1 public class ChineseCurrencyConverter {
2
3 private static final String[] UNITS = {"亿","仟万","佰万","拾万","万","仟","佰","拾","" };
4 private static final String[] CHINESE_NUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
5
6 public static String convert(long yuan) {
7
8 if (yuan >= 1e9 || yuan < 0) {
9 return "这个数字超出解析范围了";
10 }
11 String amount = String.valueOf(yuan);
12 int len = amount.length();
13 int unitsLen = UNITS.length;
14
15 String chineseCurrency = "";
16 for (int i = len - 1; i >= 0; i--) {
17 chineseCurrency = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +chineseCurrency;
18 }
19
20 chineseCurrency = chineseCurrency.replaceAll("零+","零");
21 chineseCurrency = chineseCurrency + "元整";
22 chineseCurrency = chineseCurrency.replaceAll("零元","元");
23 return chineseCurrency;
24 }
25
26 private static String number(char number) {
27 return CHINESE_NUMBER[Integer.parseInt(String.valueOf(number))];
28 }
29
30 private static String unit(char number, int pos) {
31 if(number == '0') {
32 return "";
33 }
34 return UNITS[pos];
35 }
36 }

 

下面是一些用来测试的代码:

1 public class TestConverter {
2
3 public static void main(String[] args) {
4 System.out.println(ChineseCurrencyConverter.convert(100));
5 System.out.println(ChineseCurrencyConverter.convert(130));
6 System.out.println(ChineseCurrencyConverter.convert(102));
7 System.out.println(ChineseCurrencyConverter.convert(124));
8 System.out.println(ChineseCurrencyConverter.convert(1000));
9 System.out.println(ChineseCurrencyConverter.convert(10000));
10 System.out.println(ChineseCurrencyConverter.convert(100000));
11 System.out.println(ChineseCurrencyConverter.convert(1000000));
12 System.out.println(ChineseCurrencyConverter.convert(10000000));
13 System.out.println(ChineseCurrencyConverter.convert(10000000));
14 System.out.println(ChineseCurrencyConverter.convert(100000000));
15 System.out.println(ChineseCurrencyConverter.convert(1000000000));
16 System.out.println(ChineseCurrencyConverter.convert(1002));
17 System.out.println(ChineseCurrencyConverter.convert(1020));
18 System.out.println(ChineseCurrencyConverter.convert(1200));
19 System.out.println(ChineseCurrencyConverter.convert(10003));
20 System.out.println(ChineseCurrencyConverter.convert(10030));
21 System.out.println(ChineseCurrencyConverter.convert(10033));
22 System.out.println(ChineseCurrencyConverter.convert(10330));
23 System.out.println(ChineseCurrencyConverter.convert(13030));
24 System.out.println(ChineseCurrencyConverter.convert(100030));
25 System.out.println(ChineseCurrencyConverter.convert(100003));
26 System.out.println(ChineseCurrencyConverter.convert(100300));
27 System.out.println(ChineseCurrencyConverter.convert(103000));
28 System.out.println(ChineseCurrencyConverter.convert(100303));
29 System.out.println(ChineseCurrencyConverter.convert(1000004));
30 System.out.println(ChineseCurrencyConverter.convert(10000005));
31 System.out.println(ChineseCurrencyConverter.convert(10000006));
32 System.out.println(ChineseCurrencyConverter.convert(100000007));
33 System.out.println(ChineseCurrencyConverter.convert(1000000008));
34
35 }
36 }

 

这些数字测试的结果还都正确。

这里没有处理角和分,留给有想法的同学去尝试一下吧。

 


本文链接:http://www.cnblogs.com/stephen-wang/p/3155958.html,转载请注明。

分享到:
评论

相关推荐

    BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip

    本文将详细介绍"BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip"这个压缩包中的知识点,以及如何利用批处理脚本来实现人民币金额的小写到大写的转换。 首先,我们要理解批处理脚本的基本概念。批处理脚本是...

    22231-030107-W0501.附件 3-b6-demo-人民币大写-键盘输入.exe

    22231-030107-W0501.附件 3-b6-demo-人民币大写-键盘输入.exe

    pip-20.0.2.rar

    亲测可用,找了好久的资源,需要的可以下载 下载好安装包后,为了方便,可以将pip-20.0.2的安装包解压后放在python库的script下,默认地址:C:\Users\...验证pip版本,在命令窗口运行语句(注意V大写):pip -V

    金额到大写-易语言.zip

    《易语言实现金额大写转换详解》 在计算机编程领域,金额大写转换是一个常见的需求,特别是在财务软件或银行系统中。易语言作为一款国产的、面向对象的、以中文编程为特色的编程语言,提供了简单易用的工具和方法来...

    eclipse-java-google-style.xml

    在软件开发领域,代码规范如同一座桥梁,连接着团队之间的沟通,确保代码的一致性和可读性。本文将深入探讨"eclipse-java-google-style.xml"这一文件,它是Google为Java开发者制定的一套详细且严谨的编码风格指南,...

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

    在MySQL数据库中,有时我们需要将数字金额转换成人民币的大写形式,这在财务报表或会计系统中非常常见。为了实现这一需求,我们可以自定义一个函数或者利用现有的字符串处理函数。以下是一个关于如何在MySQL中实现这...

    金额小写转大写_sql函数.rar

    "金额小写转大写_sql函数.doc"文档很可能是提供了具体的SQL代码示例或教程,讲解如何在不同的数据库环境中实现这个功能。文档可能包含了以下内容:自定义函数的创建步骤、函数参数说明、调用示例以及可能遇到的问题...

    Alibaba Java Coding Guidelines-2.1.1.rar

    《阿里巴巴Java编码规范2.1.1》是阿里巴巴开源的一款针对Java编程的代码规范指南,旨在提高代码质量、提升开发效率、确保代码可读性和可维护性。此规范被广泛应用于阿里巴巴集团及其关联公司,同时也成为业界参考的...

    tinypinyin-2.0.3.jar

    汉字转换拼音的工具包,Pinyin.toPinyin('') 1、生成的拼音不包含声调和方言,均为大写; 2、支持自定义词典; 3、执行效率很高(Pinyin4J 的 4~16 倍); 4、很低的内存占用(不添加词典时小于 30KB)

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

    《人民币大写规范》主要涉及的是在金融交易和会计记录中如何正确规范地书写中文大写金额,确保支付结算的准确性和安全性。以下是对这一规范的详细解释: 1. **标准字样**:人民币大写金额的正确书写应当采用标准...

    数字转成人民币大写代码

    这段代码是用于将数字转换为中文大写的人民币表示方式,主要应用于财务软件或者与货币相关的程序中,方便在中文环境中准确地表示金额。这个函数名为`GetChinaNum`,接收4个参数:`otherNum`、`isRMB`、`numOption`和...

    translate-the-money.rar_Money_ Money_ Money_金额大写_金额转换

    《金钱的数字化与汉字转换——理解金额大写与金额转换技术》 在信息化时代,金钱的数字表示变得越来越普遍,特别是在金融、会计等对数据精确性要求极高的领域。然而,传统的汉字大写数字在法定文件、合同以及会计...

    js_小写金额转大写金额,大写转小写.js

    通过js代码将小写金额转换成大写金额,将大写金额转换成数字

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

    ### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...

    人民币大写规范-1页.pdf

    《人民币大写规范》主要涉及的是在金融交易中如何正确规范地填写中文大写金额,以确保支付结算的准确性和安全性。以下是对该规范的详细解释: 1. **标准化和规范化填写**:填写票据和结算凭证是金融交易的基础,...

    RMB-translation.rar_translation_人民币大写

    在IT行业中,尤其是在财务软件开发或者自动化处理财务数据时,经常需要将数字形式的人民币金额转换为大写形式,这是为了符合中国的会计规范和防止篡改。"RMB-translation.rar_translation_人民币大写"这个压缩包文件...

    Java 实例 - 字符串小写转大写源代码-详细教程.zip

    本教程将深入探讨如何在Java中实现字符串的小写转大写的操作,提供详细的源代码实例和教程资源。 首先,Java 提供了内置的 `String` 类,该类提供了若干方法来执行大小写的转换。其中,`toUpperCase()` 和 `...

    FastReport小写金额转大写

    ### FastReport小写金额转大写功能解析 #### 功能概述 在财务文档或正式报告中,将数字金额转换成大写格式是一种常见的规范要求,尤其在中国。FastReport提供了一种方法,通过编写自定义函数来实现这一转换。本例...

    python实现人民币大写转换

    本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...

Global site tag (gtag.js) - Google Analytics