`
godandghost
  • 浏览: 34519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

把数字转汉语

阅读更多
闲来无事,写了一段把数字转成汉语读法的代码,在不考虑效率的情况下,基本可以实现数字的转化了。

import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

public class NumberToChinese {

	private static Map<Integer, String> unitMap = initUnitMap();
	private static Map<Character, String> numberMap = initNumberMap();
	private static Map<Integer, String> decimalUnitMap = initDecimalUnitMap();

	public static String convertNumberToChinese(String number) {
		String integerPart = "";
		String decimalPart = "";

		if (number.contains(".")) {
			integerPart = number.substring(0, number.indexOf("."));
			decimalPart = number.substring(number.indexOf(".") + 1);
		} else {
			integerPart = number;
		}

		String chinese = convertInteger(integerPart);
		if (decimalPart.isEmpty()) {
			chinese += "整";
		} else {
			chinese += convertDecimal(decimalPart);
		}
		return chinese;
	}

	/**
	 * 转换整数数部分,不考虑首位为0的情况
	 * 
	 * @param decimalPart
	 * @return
	 */
	private static String convertInteger(String str) {
		String chinese = "";
		// 反转一下,从个位开始读
		List<Character> charList = Lists.charactersOf(str).reverse();
		for (int i = 0; i < charList.size(); i++) {
			char c = charList.get(i);

			if (c == '0') {
				if (i % 4 == 0) {
					chinese = unitMap.get(i) + chinese;
				} else if (charList.get(i - 1) == '0') {
					continue;
				} else {
					chinese = numberMap.get(c) + chinese;
				}
			} else {
				chinese = numberMap.get(c) + unitMap.get(i) + chinese;
			}
		}
		return chinese;
	}

	/**
	 * 转换小数部分,省略超过3的部分
	 * 
	 * @param decimalPart
	 * @return
	 */
	private static String convertDecimal(String decimalPart) {
		if (decimalPart.length() > 3) {
			decimalPart = decimalPart.substring(0, 3);
		}

		String chinese = "";
		List<Character> charList = Lists.charactersOf(decimalPart);
		for (int i = 0; i < charList.size(); i++) {
			char c = charList.get(i);
			chinese += numberMap.get(c) + decimalUnitMap.get(i);
		}
		return chinese;
	}

	private static Map<Character, String> initNumberMap() {
		Map<Character, String> numberMap = Maps.newHashMap();
		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('0', "零");
		return numberMap;
	}

	private static Map<Integer, String> initDecimalUnitMap() {
		Map<Integer, String> unitMap = Maps.newHashMap();
		unitMap.put(0, "角");
		unitMap.put(1, "分");
		unitMap.put(2, "厘");
		return unitMap;
	}

	private static Map<Integer, String> initUnitMap() {
		Map<Integer, String> unitMap = Maps.newHashMap();
		unitMap.put(0, "元");
		unitMap.put(1, "拾");
		unitMap.put(2, "佰");
		unitMap.put(3, "仟");
		unitMap.put(4, "万");
		unitMap.put(5, "拾");
		unitMap.put(6, "佰");
		unitMap.put(7, "仟");
		unitMap.put(8, "亿");
		unitMap.put(9, "拾");
		unitMap.put(10, "佰");
		unitMap.put(11, "仟");
		unitMap.put(12, "兆");
		unitMap.put(13, "拾");
		unitMap.put(14, "佰");
		unitMap.put(15, "仟");
		return unitMap;
	}

}



测试结果:
@Test
public void test1() {
	String number = "324324.234343";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "叁拾贰万肆仟叁佰贰拾肆元贰角叁分肆厘");
}

@Test
public void test2() {
	String number = "32432443242343";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "叁拾贰兆肆仟叁佰贰拾肆亿肆仟叁佰贰拾肆万贰仟叁佰肆拾叁元整");
}

@Test
public void test3() {
	String number = "111000100100";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "壹仟壹佰壹拾亿零壹拾万零壹佰元整");
}

@Test
public void test4() {
	String number = "11100010000";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "壹佰壹拾壹亿零壹万元整");
}

@Test
public void test5() {
	String number = "1110000000";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "壹拾壹亿壹仟万元整");
}

@Test
public void test6() {
	String number = "1010000000";
	String chinese = NumberToChinese.convertNumberToChinese(number);
	Assert.assertEquals(chinese, "壹拾亿壹仟万元整");
}
分享到:
评论

相关推荐

    汉语数字串与阿拉伯数字串间转换小工具(C源码)

    `digit_convert.c`可能包含了具体的函数实现,如将汉语数字转为阿拉伯数字的函数,以及阿拉伯数字转为汉语数字的函数。`digit_convert.h`则可能定义了相关的函数原型和数据结构,供其他模块调用。这些函数可能通过...

    汉语大写数字转换成阿拉伯数字

    汉语大写数字转换成阿拉伯数字。支持如下转换 '一千二百二十一万九千三百五十七亿一千二百二十一万九千零五十七', '一千二百二十一', '一千零十', '一万零一百', '一千零十一', '一万零一百十一', '一千二百...

    JAVA实现阿拉伯数字金额转汉语大写.doc

    JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义两个数组upChinese和upChinese2,分别...

    中文数字转成阿拉伯数字 java 实现

    这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元测试类。下面我们将深入探讨这个功能的实现及其相关知识点。 首先,我们要理解中文数字和阿拉伯...

    用JS将数字转换为汉语

    要将数字转换为汉语输出,可以使用JavaScript的一些函数和技巧来实现,文件示例代码定义了一个numberToChinese函数,它接受一个数字作为参数,并返回相应的汉语表示。代码中使用了一个chineseNumber数组来存储汉字...

    c语言数字转汉语读法

    在C语言中,将数字转换为汉语读法是一项有趣且具有挑战性的任务,它涉及到字符串处理、数值计算以及汉字字符的使用。以下是如何实现这一功能的一些关键知识点: 1. **数值与字符串的转换**:首先,我们需要将输入的...

    Delphi实现数字与汉字的转换

    1. **定义汉字数字映射**:首先,我们需要创建一个哈希表或者数组,将数字0-9映射到对应的汉字大写数字。例如: ```delphi var NumberToChinese: array[0..9] of string = ('零', '壹', '贰', '叁', '肆', '伍', '...

    用C++编写数字转换成汉字大写的程序

    标题 "用C++编写数字转换成汉字大写的程序" 提示我们要探讨的是如何利用C++编程语言将阿拉伯数字转换为汉字大写,这种转换在银行、财务等对账单有明确要求的领域尤为常见。汉字大写数字通常用于增强财务记录的清晰度...

    中文数字转换阿拉伯数字

    在IT领域,中文数字转换阿拉伯数字是一个常见的编程需求,尤其在中国的文化背景下,有时需要将中文表述的数字转化为阿拉伯数字用于计算或数据处理。这个任务涉及到自然语言处理(NLP)和字符串处理技术,通常通过...

    数字转汉语大写【未优化版】

    "数字转汉语大写【未优化版】"这个项目便是实现这样一个功能,不过它仅限于处理10亿以内的整数和小数点后2位的精度,且没有进行性能优化。 首先,我们要了解数字转化为汉字大写的基本规则。在中国,数字的汉字大写...

    如何将汉语数字转为阿拉伯数字

    本文主要探讨的是如何将汉语数字转化为阿拉伯数字,这是一个涉及到自然语言处理(NLP)和字符串操作的典型任务。在汉语中,数字有特定的词汇表示,如“一”代表1,“二”代表2,而“亿”则代表10的8次方。将这些汉字...

    java实现阿拉伯数字转汉字数字

    "Java实现阿拉伯数字转汉字数字" Java是一种流行的编程语言,广泛应用于Android开发、Web开发、企业软件开发等领域。在开发过程中,经常需要将阿拉伯数字转换为汉字数字,以便于更好地与中文环境集成。在本文中,...

    java数字转汉字工具类详解

    Java数字转汉字工具类是指将数字转换为汉语中人民币的大写的工具类。该工具类主要用于处理金额的转换,提供了一种将数字转换为汉语中人民币的大写的解决方案。 在Java数字转汉字工具类中,使用了两个数组:...

    中文转汉语拼音1

    本文将深入探讨“中文转汉语拼音1”这一应用的核心知识点,包括汉语拼音的基本概念、转换原理以及相关技术的应用。 首先,我们要了解什么是汉语拼音。汉语拼音是中华人民共和国官方推广的汉字注音系统,由拉丁字母...

    金额转汉语大写

    根据提供的信息,我们可以总结出以下知识点: ...以上就是关于“金额转汉语大写”的相关知识点总结。通过理解并掌握这些内容,可以帮助开发者更好地理解和实现金额转大写的逻辑,从而应用于实际项目中。

    黑盒测试(人民币数字转大写) 实验报告

    **知识点详解:人民币数字转大写黑盒测试实验** 在软件测试领域,黑盒测试是一种常用的测试策略,尤其适用于功能验证。本次实验报告围绕“人民币数字转大写”这一特定功能,采用黑盒测试方法进行了深入研究。以下将...

    数字转换为人民币的大写

    数字转换为人民币的大写 把输入的金额转换为汉语中人民币的大写

    php 把数字转换成汉字的代码

    一个好的数字转汉字函数应该具有通用性和可配置性。这意味着它不仅可以处理特定范围内的数字,还能根据用户的配置显示不同的输出格式(如金额模式或普通数字模式),并且能够处理非标准的数字,如包含小数的情况。 ...

    数字 货币转中文描述

    这个可以将数据转化为“壹亿貳仟叁佰肆拾伍万陆仟柒佰捌拾玖元零角壹分”这样的显示,将货币数字转为了大写的表示

    汉语转拼音例子.rar

    汉语转拼音技术是一种将汉字转化为对应的汉语拼音的编程方法,主要应用于中文信息处理、语音合成、搜索引擎优化等领域。在Java编程环境下,一个常用的库就是"Pinyin4j",这个库可以帮助开发者轻松地实现汉语到拼音的...

Global site tag (gtag.js) - Google Analytics