该贴原因:
今日有幸看到uuwatch面试题:大概意思就是将日常中人民币的大写转换成阿拉伯数字表示,不记小数点,同时需要考虑效率,因为该方法需要执行100万次。
1、实现该代码(代码效率可能欠佳,望看到的同仁提出更高效率的算法)
package wzf.learn.excelDemo1.test;
import java.util.HashMap;
import java.util.Map;
public class RMB2Num {
private static Map<String,String> chineseMap = new HashMap<String,String>();
static {
chineseMap.put("壹", "1");
chineseMap.put("贰", "2");
chineseMap.put("叁", "3");
chineseMap.put("肆", "4");
chineseMap.put("伍", "5");
chineseMap.put("陆", "6");
chineseMap.put("柒", "7");
chineseMap.put("捌", "8");
chineseMap.put("玖", "9");
chineseMap.put("零", "");
chineseMap.put("亿", "100000000");
chineseMap.put("万", "10000");
chineseMap.put("仟", "1000");
chineseMap.put("佰", "100");
chineseMap.put("拾", "10");
chineseMap.put("圆", "");
chineseMap.put("整", "");
}
public long change1(String rmb){
long retStr = 0L ;
//先看里面是否包含亿
if(rmb.contains("亿")){
retStr = retStr + yi(rmb.substring(0, rmb.indexOf("亿"))) * Long.valueOf(chineseMap.get("亿"));
}
////先看里面是否包含万
int indexwan = 0;
rmb = rmb.substring(0, rmb.indexOf("亿"));
if(rmb.contains("万")){
indexwan = rmb.indexOf("万");
retStr = retStr + wan(rmb.substring(1, rmb.indexOf("万"))) * Long.valueOf(chineseMap.get("万"));
}
//截取万后面的
retStr = retStr + qian(rmb.substring(indexwan+1, rmb.length() ));
return retStr;
}
public long yi(String yi){
long ret = 0l;
int indexwan = 0;
if(yi.contains("万")){
indexwan =yi.indexOf("万");
ret = ret + wan(yi.substring(1, yi.indexOf("万"))) * Long.valueOf(chineseMap.get("万"));
}
ret = ret + qian(yi.substring(indexwan+1, yi.length()));
return ret;
}
public long wan(String wan){
return qian(wan.substring(0, wan.length()));
}
//万以后的
public long qian(String qian){
long retStr = 0l;
String segument = "";
for (int i = 0; i < qian.length(); i++) {
String temp = qian.substring(i,i+1);
if("仟".equalsIgnoreCase(temp)){
retStr = retStr + Long.valueOf(segument.equals("")?"1":segument)*Long.valueOf(chineseMap.get(temp)) ;
segument = "";
}else if("佰".equalsIgnoreCase(temp)){
retStr = retStr + Long.valueOf(segument.equals("")?"1":segument)*Long.valueOf(chineseMap.get(temp)) ;
segument = "";
}else if("拾".equalsIgnoreCase(temp)){
retStr = retStr + Long.valueOf(segument.equals("")?"1":segument)*Long.valueOf(chineseMap.get(temp)) ;
segument = "";
}else{
segument = segument + chineseMap.get(temp);
}
}
if(segument.length() > 0){
retStr = retStr + Long.valueOf(segument);
}
return retStr;
}
public static void main(String[] args) {
RMB2Num rmb = new RMB2Num();
System.out.println(rmb.qian("壹仟零叁圆整"));
System.out.println(rmb.change1("壹佰万零叁拾亿柒仟捌佰零玖万壹仟零叁圆整"));
}
}
2、需要写三个测试用例
3、写出测试用例的关键点
分享到:
相关推荐
人民币数字转换.
使用java编程实现将人民币大写转换为阿拉伯数字。本程序仅实现万元以下的人民币转换,输入数据必须以元结尾。
人民币数字转换成汉字大写 android Java 运行效率
本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...
Java 人民币金额数字转换成大写 Java 人民币金额数字转换成大写是 Java 面试中最常见的问题之一。本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中...
JS将数字转换为大写汉字人民币
数字转换成人民币大写
Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...
原生JavaScript实现的人民币数字大写转换特效源码就是解决这类问题的一个工具。这个网页模板提供了一种高效且灵活的方法,使得前端开发者能够轻松地在网页上实现这一功能。 首先,我们要理解原生JavaScript是如何...
【人民币转换】是一个常见的编程需求...总之,人民币转换是一个涉及数字与汉字对应、位数处理、字符串操作等多个知识点的编程任务,通过实现这一功能,我们可以加深对编程语言的理解,同时提高在实际问题中的解决能力。
这段代码是用于将数字转换为中文大写的人民币表示方式,主要应用于财务软件或者与货币相关的程序中,方便在中文环境中准确地表示金额。这个函数名为`GetChinaNum`,接收4个参数:`otherNum`、`isRMB`、`numOption`和...
在Excel中,将数字转换为人民币大写文字是一项常见的需求,尤其在财务报表或发票制作时更为重要。人民币大写的规范格式包括“壹”、“贰”等汉字,确保了金额的准确性和专业性。以下是一些关于如何在Excel中实现这一...
人民币数字转大写_金额转换小工具 财务人员经常用到。
"中科大-软件测试实验一-人民币数字大写转换黑盒测试实验报告" 本实验报告旨在对人民币数字大写转换软件进行黑盒测试,测试目的在于评估该软件的质量和可靠性。下面是实验报告的详细内容: 一、引言 软件测试是...
人民币数字转换成汉字,小数点后面保留两位数字,保存到分
这个"Rmb.rar_人民币 转换 java_人民币大写"的压缩包就是一个典型的例子,它包含了一个Java程序,用于将数字转换成符合中国金融规范的人民币大写形式。这种转换对于财务报表、发票开具等场景至关重要,因为它们要求...
其次,数字转中文(人民币)和中文转数字(人民币)是金融应用中常见的需求。在C#中,我们可以创建一个包含中文数字字符的字符串数组,然后通过遍历数字字符串,将每个数字对应转换为中文字符。对于人民币金额,需要...
人民币数字转大写.java
本文将详细讲解如何实现“人民币大写金额转数字”的算法,主要基于C#编程语言。 首先,我们需要了解人民币大写金额的基本规则。人民币大写金额由“零”、“壹”、“贰”、“叁”、“肆”、“伍”、“陆”、“柒”、...