`

java金额数字转中文工具类

    博客分类:
  • java
 
阅读更多

 

package light.mvc.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 金额数字转中文工具类
 * 
 * @author ardo
 * 
 */
public class ConvertNum {

	/**
	 * 把金额阿拉伯数字转换为汉字表示,小数点后四舍五入保留两位
	 * 还有一种方法可以在转换的过程中不考虑连续0的情况,然后对最终的结果进行一次遍历合并连续的零
	 */
	public static String[] ChineseNum = new String[] { "零", "壹", "贰", "叁", "肆",
			"伍", "陆", "柒", "捌", "玖" };

	public static String NumToChinese(double num) {
		if (num > 99999999999999.99 || num < -99999999999999.99)
			throw new IllegalArgumentException(
					"参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");
		boolean negative = false;// 正负标号
		if (num < 0) {
			negative = true;
			num = num * (-1);
		}
		long temp = Math.round(num * 100);
		int numFen = (int) (temp % 10);// 分
		temp = temp / 10;
		int numJiao = (int) (temp % 10);// 角
		temp = temp / 10;
		// 此时temp只包含整数部分
		int[] parts = new int[20];// 将金额整数部分分为在0-9999之间数的各个部分
		int numParts = 0;// 记录把原来金额整数部分分割为几个部分
		for (int i = 0;; i++) {
			if (temp == 0)
				break;
			int part = (int) (temp % 10000);
			parts[i] = part;
			temp = temp / 10000;
			numParts++;
		}
		boolean beforeWanIsZero = true;// 标志位,记录万的下一级是否为0
		String chineseStr = "";
		for (int i = 0; i < numParts; i++) {
			String partChinese = partConvert(parts[i]);
			if (i % 2 == 0) {
				if ("".equals(partChinese))
					beforeWanIsZero = true;
				else
					beforeWanIsZero = false;
			}
			if (i != 0) {
				if (i % 2 == 0)// 亿的部分
					chineseStr = "亿" + chineseStr;
				else {
					if ("".equals(partChinese) && !beforeWanIsZero)// 如果“万”对应的
																	// part 为
																	// 0,而“万”下面一级不为
																	// 0,则不加“万”,而加“零”
						chineseStr = "零" + chineseStr;
					else {
						if (parts[i - 1] < 1000 && parts[i - 1] > 0)// 如果万的部分不为0,而万前面的部分小于1000大于0,则万后面应该跟零
							chineseStr = "零" + chineseStr;
						chineseStr = "万" + chineseStr;
					}
				}
			}
			chineseStr = partChinese + chineseStr;
		}
		if ("".equals(chineseStr))// 整数部分为0,则表示为零元
			chineseStr = ChineseNum[0];
		else if (negative)// 整数部分部位0,但是为负数
			chineseStr = "负" + chineseStr;
		chineseStr = chineseStr + "元";
		if (numFen == 0 && numJiao == 0) {
			chineseStr = chineseStr + "整";
		} else if (numFen == 0) {// 0分
			chineseStr = chineseStr + ChineseNum[numJiao] + "角";
		} else {
			if (numJiao == 0)
				chineseStr = chineseStr + "零" + ChineseNum[numFen] + "分";
			else
				chineseStr = chineseStr + ChineseNum[numJiao] + "角"
						+ ChineseNum[numFen] + "分";
		}
		return chineseStr;
	}

	// 转换拆分后的每个部分,0-9999之间
	public static String partConvert(int partNum) {
		if (partNum < 0 || partNum > 10000) {
			throw new IllegalArgumentException("参数必须是大于等于0或小于10000的整数");
		}
		String[] units = new String[] { "", "拾", "佰", "仟" };
		int temp = partNum;
		String partResult = new Integer(partNum).toString();
		int partResultLength = partResult.length();
		boolean lastIsZero = true;// 记录上一位是否为0
		String chineseStr = "";
		for (int i = 0; i < partResultLength; i++) {
			if (temp == 0)// 高位无数字
				break;
			int digit = temp % 10;
			if (digit == 0) {
				if (!lastIsZero)// 如果前一个数字不是0则在当前汉字串前加零
					chineseStr = "零" + chineseStr;
				lastIsZero = true;
			} else {
				chineseStr = ChineseNum[digit] + units[i] + chineseStr;
				lastIsZero = false;
			}
			temp = temp / 10;
		}
		return chineseStr;
	}

	public static void main(String args[]) {
		double num = 0;
		System.out.println("请输入金额数字,-1退出");
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			num = Double.parseDouble(br.readLine());
		} catch (IOException e) {
			System.out.println(e.toString());
		}
		while (num != -1) {
			System.out.println(num + NumToChinese(num));
			try {
				BufferedReader br = new BufferedReader(new InputStreamReader(
						System.in));
				num = Double.parseDouble(br.readLine());
			} catch (IOException e) {
				System.out.println(e.toString());
			}
		}
		System.out.println("其他测试:");
		System.out.println("100120: " + NumToChinese(100120));
		System.out.println("25000000000005.999: "
				+ NumToChinese(25000000000005.999));
		System.out.println("45689263.626: " + NumToChinese(45689263.626));
		System.out.println("0.69457: " + NumToChinese(0.69457));
		System.out.println("253.0: " + NumToChinese(253.0));
		System.out.println("0: " + NumToChinese(0));
	}
}

 转自:https://blog.csdn.net/ardo_pass/article/details/78703030

 

 

分享到:
评论

相关推荐

    java金额数字转中文工具类详解

    本文将详细介绍Java金额数字转中文工具类的实现原理及使用方法,希望能够帮助开发者更好地理解和运用这一工具。 Java金额数字转中文工具类的核心思想是将数字按照中文的计数单位进行分割,并将各个部分转换为对应的...

    java 金额转大写工具类

    可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园

    Java金额数字大小写转化工具类

    Java金额数字大小写转化工具类,Java金额数字大小写转化工具类,Java金额数字大小写转化工具类

    java实现数字转换人民币中文大写工具

    Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...

    java数字转汉字工具类详解

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

    java代码将金额数字转为中文工具类

    java代码将金额数字转为中文工具类。 java金额转换工具类。

    Android中数字转中文,金额转大写

    本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转大写,并且会涉及到口语化的转换。 首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或...

    Java数字金额转大写

    将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。

    数字金额转汉字的读法(java代码)

    本例中,我们将讨论如何用Java编程语言实现“数字金额转汉字的读法”。 首先,我们要理解数字金额转汉字的基本规则。在中文中,数字有特定的汉字对应,例如,“1”对应“一”,“2”对应“二”,“10”对应“十”,...

    java数字转金额(任意金额、支持负数、前缀0)

    在Java编程中,将数字转换为金额格式是一项常见的任务,特别是在财务系统或者电子商务应用中。这个过程涉及到将数字转换成符合人类阅读习惯的货币格式,包括添加逗号分隔符,处理负数,以及在必要时添加前导零。本文...

    java写的把数字转化成英语的工具

    有些变态的报表需要把数字转换成英文输出,但愿这个能帮得到你 one hundred eighty-eight thousand, eight hundred one hundred eighty-eight thousand, eight hundred one one hundred eighty-eight thousand, ...

    java金额转换,阿拉伯数字转换成中国传统形式。

    2. **创建数字与汉字映射**:创建一个字符串数组,存储0-9对应的中文汉字,如{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}。 3. **处理零**:在转换过程中,我们需要特别注意“零”的处理。如果...

    将阿拉伯数字转换为金额的汉字大写

    本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...

    我积攒的java工具类 基本满足开发需要的工具类

    D:\002 我的工具类\026 数字金额大写转换\ConvertNumberToUpper.java D:\002 我的工具类\027 Java6实现调用操作平台桌面系统 D:\002 我的工具类\027 Java6实现调用操作平台桌面系统\DesktopDemo.java

    Java实现数字转成英文的方法

    在Java编程中,将数字转换成英文是一种常见的需求,尤其在处理数字显示或报告时。这个过程涉及到字符串处理和数组操作,以将数字的各个部分转换成对应的英文单词。以下是如何使用Java实现这一功能的详细步骤: 首先...

    金钱大写转小写数字类java(精确到角)

    本节将详细探讨如何用Java编程语言实现一个精确到角的中文大写转小写数字的程序。 首先,我们需要了解中文大写数字与阿拉伯数字的对应关系: 1. 零:零 2. 一:壹 3. 二:贰 4. 三:叁 5. 四:肆 6. 五:伍 7. 六:...

    将数字转为中文金额的大写方式(Java版)

    总之,将数字转化为中文金额大写是财务软件和相关工具的常见需求,通过Java编程可以实现这一功能,同时考虑到用户体验和效率,代码设计需要充分考虑各种边界情况和优化措施。在实际开发中,不断优化和完善这样的工具...

    JAVA工具类

    NumberUtils - 数字工具类 PinyinUtils - 汉字转拼音 media MediaUtils - 基于ffmpeg,qtfaststart,yamdi的多媒体工具类 net AttachmentUtils - HTTP文件下载防止中文乱码 FastDFSUtils - 操作FastDFS的工具类 ...

    java钱币小写转换大写

    在Java编程中,将钱币小写金额...通过以上步骤,我们已经实现了一个简单的Java工具类来将小写金额转换为大写。在实际开发中,还可以根据需求进行优化,比如添加缓存机制来提高性能,或者扩展支持其他货币种类的转换。

    Java判断数字是否在制定范围

    Java判断数字是否在制定范围 A B 中或者与A B 相等

Global site tag (gtag.js) - Google Analytics