将大写金额(精确到圆)转换成数字
来源:互联网 发布:金融数据分析师助理 编辑:程序博客网 时间:2024/04/29 03:20
程序代码如下:
package zq.core;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CMoneyToNum {
static Map<Character, Integer> numberMap = new HashMap<Character, Integer>();
static Map<Character, Integer> unitMap = new HashMap<Character, Integer>();
static {
numberMap.put('一', 1);
numberMap.put('二', 2);
numberMap.put('三', 3);
numberMap.put('四', 4);
numberMap.put('五', 5);
numberMap.put('六', 6);
numberMap.put('七', 7);
numberMap.put('八', 8);
numberMap.put('九', 9);
numberMap.put('壹', 1);
numberMap.put('贰', 2);
numberMap.put('叁', 3);
numberMap.put('肆', 4);
numberMap.put('伍', 5);
numberMap.put('陆', 6);
numberMap.put('柒', 7);
numberMap.put('捌', 8);
numberMap.put('玖', 9);
unitMap.put('亿', 100000000);
unitMap.put('万', 10000);
unitMap.put('千', 1000);
unitMap.put('仟', 1000);
unitMap.put('佰', 100);
unitMap.put('百', 100);
unitMap.put('拾', 10);
unitMap.put('十', 10);
}
public long chineseToNumber(String cMoney) {
cMoney = cMoney.replaceAll("零|元|圆|整", "");
long result = 0;
Pattern p = Pattern.compile("([^亿万]+)([亿万]?)");
Matcher m = p.matcher(cMoney);
int start = 0;
while (m.find(start)) {
String partOfCMoney = m.group(1);
int unit = 1;
try {
unit = unitMap.get(m.group(2).charAt(0));
} catch (IndexOutOfBoundsException e) {
}
long partOfMoney = 0;
char[] cArray = partOfCMoney.toCharArray();
for (int i = 1; i < partOfCMoney.length(); i += 2) {
Integer n = numberMap.get(cArray[i-1]);
Integer u = unitMap.get(cArray[i]);
partOfMoney += (long) n * u;
}
if (cArray.length % 2 == 1) {
partOfMoney += numberMap.get(cArray[cArray.length - 1]);
}
result += (long) (partOfMoney * unit);
start = m.end();
}
return result;
}
}
测试代码如下:
package zq.test;
import static org.junit.Assert.assertEquals;
import org.junit.BeforeClass;
import org.junit.Test;
import zq.core.CMoneyToNum;
public class CMoneyToNumTest {
private static CMoneyToNum c2n;
@BeforeClass
public static void init() {
c2n = new CMoneyToNum();
}
@Test
public void test1() {
String cMoney = "一仟贰佰三十肆亿伍仟六百七十八万九千一百二拾叁元整";
long number = c2n.chineseToNumber(cMoney);
assertEquals(123456789123L, number);
}
@Test
public void test2() {
String cMoney = "壹仟零二拾亿零三百零肆";
long number = c2n.chineseToNumber(cMoney);
assertEquals(102000000304L, number);
}
@Test
public void test3() {
String cMoney = "壹仟二佰万元";
long number = c2n.chineseToNumber(cMoney);
assertEquals(12000000, number);
}
@Test
public void test4() {
String cMoney = "四佰圆整";
long number = c2n.chineseToNumber(cMoney);
assertEquals(400, number);
}
@Test
public void test5() {
String cMoney = "一圆";
long number = c2n.chineseToNumber(cMoney);
assertEquals(1, number);
}
}
- 将大写金额(精确到圆)转换成数字
- 用PHP实现小写金额转换大写金额【精确到分】
- 将金额转换到大写数字的C#函数
- 将金额转换到大写数字的函数
- C#将金额转换为大写金额
- Dephi将金额转换的大写金额
- 将数字金额转换成大写金额
- AnglurJS将金额转换为大写金额
- 金额数字转换到大写
- 将小写金额转换为中文大写
- 将数字转换成为大写金额!
- 将金额转换成大写汉字
- 将数字转换成大写金额
- 将数字转换为大写金额
- 将小写金额转换为中文大写
- 将数字转换为大写金额
- 将小写金额转换成为大写
- C#将人民币转换成大写金额
- 多边形轮廓
- poj 1151(线段树+扫描+几何计算)
- solr3.4源代码学习笔记(二)
- poj-2186 强连通分量
- 生成互不相同的N个随机数
- 将大写金额(精确到圆)转换成数字
- rcp(插件开发)org.eclipse.core.resources.builders扩展点-转载二进制兄弟的文章
- 美国到底有多坏
- sql语句 类型转换
- 通过命令行指定 Java 程序运行时使用的字符集
- SQLSERVER 添加用户
- 在centos 下安装配置基于gitosis 的git 服务
- 大端模式和小端模式详解
- 四大网络攻击常见手段及防护