import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class DigitUtil { private static Map<String, Integer> MAP_ALPHA = new HashMap<String, Integer>(); static{ MAP_ALPHA.put("一", 1); MAP_ALPHA.put("二", 2); MAP_ALPHA.put("三", 3); MAP_ALPHA.put("四", 4); MAP_ALPHA.put("五", 5); MAP_ALPHA.put("六", 6); MAP_ALPHA.put("七", 7); MAP_ALPHA.put("八", 8); MAP_ALPHA.put("九", 9); } /** * 目前只支持1万亿以下 * @param text */ public static long getArabicDigit(String text){ int b=text.length(); if (b>23) { return 0; } long count = 0; if (text.indexOf("亿")>-1) {//text>1亿 String[]u = text.split("亿"); String num_yi = u[0]; int yi = getThousands(num_yi); count+=yi*100000000l; if (u.length>1) { if (u[1].indexOf("万")>-1) { String[]v = u[1].split("万"); String num_wan = v[0]; int wan = getThousands(num_wan); count+=wan*10000; if (v.length>1) { String num = v[1]; int p = getThousands(num); count+=p; } }else { int p = getThousands(u[1]); count+=p; } } }else if (text.indexOf("万")>-1) {//text<1亿&&text>1万 String[]v = text.split("万"); String num_wan = v[0]; int wan = getThousands(num_wan); count+=wan*10000; if (v.length>1) { String num = v[1]; int p = getThousands(num); count+=p; } }else {//text<1万&&text>0 int p = getThousands(text); count+=p; } return count; } /** * 处理一万以内 */ public static int getThousands(String text){ text = text.replaceAll("零", ""); int count = 0; if (text.contains("千")) { String u = getUnitDigit(text, "千"); text = text.replaceAll(u, ""); if (u.length()>0) { int qian = MAP_ALPHA.get(u.replaceAll("千", "")); count+=qian*1000; } } if (text.contains("百")) { String u = getUnitDigit(text, "百"); text = text.replaceAll(u, ""); if (u.length()>0) { int bai = MAP_ALPHA.get(u.replaceAll("百", "")); count+=bai*100; } } if (text.contains("十")) { String u = getUnitDigit(text, "十"); text = text.replaceAll(u, ""); if (u.length()==0) { u="一十"; } if (u.length()>0) { int shi = MAP_ALPHA.get(u.replaceAll("十", "")); count+=shi*10; } } if (MAP_ALPHA.keySet().contains(text)) { int ge = MAP_ALPHA.get(text); count+=ge; } return count; } /** * 获取字符串中的单位前的数 * @param text * @param unit * @return */ public static String getUnitDigit(String text,String unit) { String regexp = "[一二三四五六七八九]{1}"+unit; Pattern pattern = Pattern.compile(regexp, 2); Matcher matcher = pattern.matcher(text); StringBuffer sb = new StringBuffer(); while (matcher.find()) { sb.append(matcher.group()); } return sb.toString(); } //思路2:遇到零处理时,split”零“,2数相加 public static void main(String[] args) { String t = "九千零十亿零三百一十万三千零五"; try { long s = getArabicDigit(t); System.out.println(s); } catch (Exception e) { // e.printStackTrace(); System.out.println("chinese digit not support"); } } }
相关推荐
此程序能够支持的最大数字为亿级别,即能够处理的最大输入为9位数字(不包括小数点)。 #### 三、核心算法解析 为了实现数字到中文的转换,程序采用了一种较为简单直观的方法,主要包括以下几个步骤: 1. **初始化...
当数字超过99时,会按照千、万、亿等单位进行划分,并用对应的中文大写表示。例如,1234567890会被转换为“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”。 `Digit2CNup.dll`是这个功能的核心动态链接库文件,它包含了...
在C#编程中,将商品金额的阿拉伯数字转换为汉字大写形式,是常见的金融或会计软件中的一个功能。这通常涉及到数字与汉字字符的映射关系,以及金额单位的正确添加。以下是一些关于这个主题的重要知识点: 1. **数字...
1. **数字到汉字的转换**:人民币的大写形式使用汉字进行表示,例如1(壹)、2(贰)、3(叁)等,而小写则是阿拉伯数字。转换过程中,每个数字都有对应的汉字形式,包括个、十、百、千、万、亿等单位。 2. **整数...
小写金额通常用阿拉伯数字表示,如123456.78,而大写金额则是用汉字来表示,如壹拾贰万叁仟肆佰伍拾陆元柒角捌分,以防止篡改和增加账目的准确性。"小写金额转大写金额工具"就是专门针对这一需求设计的软件应用。 ...
特别是在财务领域,涉及到货币金额的表示时,有时需要将阿拉伯数字格式的金额转化为中文大写,以符合某些特定的财务规范。本文将详细介绍一个JavaScript函数,用于将人民币(RMB)的数字形式转换为中文大写。 函数...
字库内容极其丰富,不仅包括汉字和ASCII字符,还覆盖了拉丁文系、希腊文系、基里尔文系和阿拉伯文系等文字,总字符数达到惊人的数万之多。11x12点和15x16点的Unicode点阵字库,支持GB13000标准,确保了广泛的字符...