- 浏览: 108980 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (151)
- 120D02 (5)
- 直升机 (1)
- 我的技术资料收集 (82)
- 的技术资料收集 (4)
- .NET Solution (2)
- ASP.NET (1)
- Linq to sql (1)
- 数据库技术(MS SQL) (2)
- 架构/设计 (1)
- 敏捷/持续集成 (1)
- C#.NET开发 (1)
- Matlab开发 (1)
- WinForm开发 (1)
- 开源技术 (1)
- jQuery (1)
- 我的博文 (4)
- js (2)
- android (2)
- 9. 读书笔记 (1)
- CSS3 (1)
- HTML5 (1)
- JavaScript (5)
- 移动开发 (2)
- 编程心得 (1)
- Linux操作系统 (1)
- (BI)商业智能 (1)
- IOS (1)
- Windows Phone (2)
- C# API (1)
- JQuery系列 (1)
- TFS (1)
- C# (2)
- ExtJs (1)
- .NET (1)
- Nginx (1)
- WCF学习笔记 (1)
- Computer Graphic (1)
- IT产品 (1)
- 工具分享 (1)
- MySelf (1)
- C#专栏 (1)
- 管理 (1)
- 基于Oracle Logminer数据同步 (1)
- 日常 (1)
- 实用工具 (1)
- 网页设计 (1)
- avalon (1)
- flash (1)
- DDD (1)
- 01 技术Android (1)
- WCF (1)
- selenium (1)
最新评论
-
464410531:
三国杀。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ...
实用的职场宝典:不提拔你,就因为你只想把工作做好
原帖地址: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 }
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 }
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,转载请注明。
发表评论
-
Javascript:猜猜弹出的是啥?为啥? - 幸福框架
2013-06-28 13:33 429原帖地址:http://www.cnblogs.com/hap ... -
C#中WindowsForm常见控件的运用 -- - 李晓峰
2013-06-28 13:27 1747原帖地址:http://www.cnblogs.com/liy ... -
海量数据处理利器之Hash——在线邮件地址过滤 - MyDetail
2013-06-27 12:00 652原帖地址:http://www.cnblo ... -
ASP.NET MVC 4 for Visual Studio 2010 下载地址 - 张鸿伟
2013-06-27 11:48 754原帖地址:http://www.cnblogs.com/wei ... -
【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化 - r01cn
2013-06-26 11:00 919原帖地址:http://www.cnblogs.com/r01 ... -
[珠玑之椟]估算的应用与Little定律 - 五岳
2013-06-26 10:54 639原帖地址:http://www.cnblogs.com/wuy ... -
从银行的钱荒看一个公司的团队建设 产品线过多最终导致最赚钱的项目面临破产 - James Li
2013-06-26 10:36 632原帖地址:http://www.cnblogs.com/Jam ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 13:39 535原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 13:33 615原帖地址:http://www.cnblo ... -
如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap" - 量子计算机
2013-06-25 13:27 869原帖地址:http://www.cnblogs.com/DSh ... -
一步一步将自己的代码转换为观察者模式 - 文酱
2013-06-23 11:36 608原帖地址:http://www.cnblo ... -
iOS内存错误EXC_BAD_ACCESS的解决方法(message sent to deallocated instance) - VicStudio
2013-06-23 11:30 543原帖地址:http://www.cnblogs.com/vic ... -
记录asp.net在IE10下事件丢失排错经过 - Adming
2013-06-23 11:24 710原帖地址:http://www.cnblogs.com/wea ... -
记 FineUI 官方论坛所遭受的一次真实网络攻击!做一个像 ice 有道德的黑客! - 三生石上
2013-06-23 11:18 793原帖地址:http://www.cnblogs.com/san ... -
3、使用Oracle Logminer同步Demo
2013-06-19 10:33 571原帖地址:http://www.cnblogs.com/shi ... -
算法实践——数独的基本解法
2013-06-19 10:27 1450原帖地址:http://www.cnblogs.com/gre ... -
简单实现TCP下的大文件高效传输
2013-06-19 10:21 691原帖地址:http://www.cnblogs.com/sma ... -
avalon - 初步接触
2013-06-18 10:06 783原帖地址:http://www.cnblogs.com/aar ... -
Nginx学习笔记(一) Nginx架构
2013-06-18 09:59 527原帖地址:http://www.cnblogs.com/cod ... -
证书打印《二》
2013-06-17 10:47 532原帖地址:http://www.cnblogs.com/bin ...
相关推荐
本文将详细介绍"BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip"这个压缩包中的知识点,以及如何利用批处理脚本来实现人民币金额的小写到大写的转换。 首先,我们要理解批处理脚本的基本概念。批处理脚本是...
22231-030107-W0501.附件 3-b6-demo-人民币大写-键盘输入.exe
亲测可用,找了好久的资源,需要的可以下载 下载好安装包后,为了方便,可以将pip-20.0.2的安装包解压后放在python库的script下,默认地址:C:\Users\...验证pip版本,在命令窗口运行语句(注意V大写):pip -V
《易语言实现金额大写转换详解》 在计算机编程领域,金额大写转换是一个常见的需求,特别是在财务软件或银行系统中。易语言作为一款国产的、面向对象的、以中文编程为特色的编程语言,提供了简单易用的工具和方法来...
汉字转换拼音的工具包,Pinyin.toPinyin('') 1、生成的拼音不包含声调和方言,均为大写; 2、支持自定义词典; 3、执行效率很高(Pinyin4J 的 4~16 倍); 4、很低的内存占用(不添加词典时小于 30KB)
在MySQL数据库中,有时我们需要将数字金额转换成人民币的大写形式,这在财务报表或会计系统中非常常见。为了实现这一需求,我们可以自定义一个函数或者利用现有的字符串处理函数。以下是一个关于如何在MySQL中实现这...
"金额小写转大写_sql函数.doc"文档很可能是提供了具体的SQL代码示例或教程,讲解如何在不同的数据库环境中实现这个功能。文档可能包含了以下内容:自定义函数的创建步骤、函数参数说明、调用示例以及可能遇到的问题...
《阿里巴巴Java编码规范2.1.1》是阿里巴巴开源的一款针对Java编程的代码规范指南,旨在提高代码质量、提升开发效率、确保代码可读性和可维护性。此规范被广泛应用于阿里巴巴集团及其关联公司,同时也成为业界参考的...
《人民币大写规范》主要涉及的是在金融交易和会计记录中如何正确规范地书写中文大写金额,确保支付结算的准确性和安全性。以下是对这一规范的详细解释: 1. **标准字样**:人民币大写金额的正确书写应当采用标准...
这段代码是用于将数字转换为中文大写的人民币表示方式,主要应用于财务软件或者与货币相关的程序中,方便在中文环境中准确地表示金额。这个函数名为`GetChinaNum`,接收4个参数:`otherNum`、`isRMB`、`numOption`和...
《金钱的数字化与汉字转换——理解金额大写与金额转换技术》 在信息化时代,金钱的数字表示变得越来越普遍,特别是在金融、会计等对数据精确性要求极高的领域。然而,传统的汉字大写数字在法定文件、合同以及会计...
通过js代码将小写金额转换成大写金额,将大写金额转换成数字
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
《人民币大写规范》主要涉及的是在金融交易中如何正确规范地填写中文大写金额,以确保支付结算的准确性和安全性。以下是对该规范的详细解释: 1. **标准化和规范化填写**:填写票据和结算凭证是金融交易的基础,...
在IT行业中,尤其是在财务软件开发或者自动化处理财务数据时,经常需要将数字形式的人民币金额转换为大写形式,这是为了符合中国的会计规范和防止篡改。"RMB-translation.rar_translation_人民币大写"这个压缩包文件...
本教程将深入探讨如何在Java中实现字符串的小写转大写的操作,提供详细的源代码实例和教程资源。 首先,Java 提供了内置的 `String` 类,该类提供了若干方法来执行大小写的转换。其中,`toUpperCase()` 和 `...
### FastReport小写金额转大写功能解析 #### 功能概述 在财务文档或正式报告中,将数字金额转换成大写格式是一种常见的规范要求,尤其在中国。FastReport提供了一种方法,通过编写自定义函数来实现这一转换。本例...
本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...