`
susam
  • 浏览: 105026 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

美元的阿拉伯数字转换为英文大写的格式

F# 
阅读更多

美元的阿拉伯数字转换为英文大写的格式,参考了网上的代码,然后重构整理了一下。

 

package com.proviaa.ipds.test;

import com.proviaa.ipds.util.CommonUtils;

/**
 * 把表示美元的阿拉伯数字转换为英文大写的格式。
 * 
 * @author Ken
 * 
 */
public class DollarsNumberFormat {
	private static final String[] MAJORS = { " ", " Thousand ", " Million ",
			" Billion ", " Trillion ", " Quadrillion ", " Quintillion " };

	private static final String[] TENS = { " ", " Ten ", " Twenty ", " Thirty ",
			" Forty ", " Fifty ", " Sixty ", " Seventy ", " Eighty ",
			" Ninety " };

	private static final String[] NUMBERS = { " ", " One ", " Two ", " Three ",
			" Four ", " Five ", " Six ", " Seven ", " Eight ", " Nine ",
			" Ten ", " Eleven ", " Twelve ", " Thirteen ", " Fourteen ",
			" Fifteen ", " Sixteen ", " Seventeen ", " Eighteen ", " Nineteen " };

	/**
	 * 把阿拉伯数字转换为英文大写格式。<br>
	 * 例如:123.01:One Hundred Twenty Three Dollars And One Cent
	 * 
	 * @param value
	 * @return
	 */
	public String format(double value) {
		double number = CommonUtils.round(value, 2);// 小数点保留两位
		String result = getDollarPart(number) + getCentPart(number);
		return result.replace("  ", " ").toUpperCase();// 去掉多余的空格,并转为大写
	}

	// 获取整数部分的转换
	private String getDollarPart(double value) {
		int number = (int) value;
		String dollars = formatDigit(number);
		if (dollars.trim().equals(""))
			return "No Dollars";
		else if (dollars.trim().equals("One"))
			return "One Dollar";
		else
			return dollars + " Dollars";

	}

	// 获取小数部分的转换
	private String getCentPart(double number) {
		int cents = (int) (Math.round(number * 100) - ((int) number) * 100);
		String centsPart = formatDigit(cents);

		if (centsPart.trim().equals(""))
			return " And No Cents";
		else if (centsPart.trim().equals("One"))
			return " And One Cent";
		else
			return " And " + centsPart + " Cents";
	}

	private String formatDigit(int value) {
		int number = value;
		String prefix = ""; // 正负号前缀。

		if (number < 0) {
			number = -number;
			prefix = "Negative ";
		}

		String result = "";
		int index = 0;
		do {
			int n = number % 1000;
			if (n != 0) {
				result = formatLessThanOneThousand(n) + MAJORS[index] + result;
			}
			index++;
			number /= 1000;
		} while (number > 0);

		return (prefix + result).trim();
	}

	private String formatLessThanOneThousand(int value) {
		int number = value;
		String result = "";
		if (number % 100 < 20) {// 前两位数的值在20以内。
			result = NUMBERS[number % 100];
			number /= 100;
		} else {// 前两位数的值在20以外。
			result = NUMBERS[number % 10];// 个位
			number /= 10;

			result = TENS[number % 10] + result;// 十位&个位
			number /= 10;
		}
		if (number == 0)
			return result;
		else
			return NUMBERS[number] + " Hundred " + result; // 百位&十位&个位。
	}

	public static void main(String[] args) {
		DollarsNumberFormat f = new DollarsNumberFormat();
		System.out.println("123456789 = " + f.format(123456789));
		System.out.println("123.01 = " + f.format(123.01));
		System.out.println("0.01 = " + f.format(0.01));
		System.out.println("0.0 = " + f.format(0.0));
		System.out.println("-123.71 = " + f.format(-123.71));

	}
}

 

测试结果:

 

123456789 = ONE HUNDRED TWENTY THREE MILLION FOUR HUNDRED FIFTY SIX THOUSAND SEVEN HUNDRED EIGHTY NINE DOLLARS AND NO CENTS
123.01 = ONE HUNDRED TWENTY THREE DOLLARS AND ONE CENT
0.01 = NO DOLLARS AND ONE CENT
0.0 = NO DOLLARS AND NO CENTS
-123.71 = NEGATIVE ONE HUNDRED TWENTY THREE DOLLARS AND NEGATIVE SEVENTY ONE CENTS
 
分享到:
评论

相关推荐

    阿拉伯数字转换成英文美元

    阿拉伯数字转换成英文美元,eg. 123USD 转换成:Say in USD One Hundred Thirty Two Only.

    大写英文金额转换器

    在财务工作中,金额通常以阿拉伯数字(1, 2, 3...)表示,但在正式文件中,为了清晰性和安全性,会将其转换为中文的大写形式(壹、贰、叁...)。这个转换器能够帮助用户快速、准确地完成这一过程。 描述中的“方便...

    Excel大写金额转换公式

    Excel的大写金额转换公式可以帮助我们快速、准确地将阿拉伯数字格式的金额转换为汉字大写的表示形式。以下是一些关键的知识点,涵盖了如何实现这一功能。 1. **基数转换**:首先,我们要理解的是,大写金额转换涉及...

    人民币大写转换js,精确到角

    在IT行业中,尤其是在Web开发领域,经常会遇到将数字转换为中文大写的场景,这在处理财务数据或打印发票时尤其重要。"人民币大写转换js"是一个常见的需求,它涉及到JavaScript编程语言中的字符串处理和数字格式化...

    excel中文金额大写公式

    具体来说,它可以将阿拉伯数字(例如123)转换为中文大写数字(例如壹佰贰拾叁)。该函数支持多种模式,其中最常用的是模式2,即转换为包含“元”、“角”、“分”的格式。 ### 2. 处理整数部分与小数部分 对于...

    大写日期大写金额

    - 将阿拉伯数字1-9转换为中文数字:一、二、三、四、五、六、七、八、九。 - 将阿拉伯数字10-90转换为中文数字:十、二十、三十、四十、五十、六十、七十、八十、九十。 - 对于0,通常用零表示,如2023年10月1日...

    人民币金额转换源代码

    此外,考虑到中国特有的大写金额表示法(如壹、贰、叁等),源代码可能还包含了将阿拉伯数字转换为中文大写的逻辑。这涉及到一个映射表,将数字对应到对应的中文字符,然后拼接成字符串。这部分代码可能具有一定的...

    人民币转换(原代码)

    人民币大写的表示方式与阿拉伯数字对应如下: 1. "壹" 对应 1 2. "贰" 对应 2 3. "叁" 对应 3 4. "肆" 对应 4 5. "伍" 对应 5 6. "陆" 对应 6 7. "柒" 对应 7 8. "捌" 对应 8 9. "玖" 对应 9 0. "零" 对应 0 除了个...

    Vue实现自带的过滤器实例

    例如,创建一个过滤器用来将数字转换为中文数字表示: ```javascript Vue.filter('chineseNum', function(value) { // 实现将阿拉伯数字转为中文数字的逻辑 }); ``` 然后在模板中使用: ```html {{ number | ...

    Excel基础培训.ppt

    - Excel提供了一个复杂的公式,通过SUBSTITUTE和TEXT函数组合,可以将阿拉伯数字转换为大写金额。例如,公式`=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(A1&gt;-0.5%,,"负")&TEXT(INT(FIXED(ABS(A1))),"[dbnum2]")&TEXT...

    ASCLL码表包含多种进制转换

    ASCII码表中的可打印字符是指从32(0x20)到126(0x7E)之间的字符,这部分字符包含了英文的大写和小写字母、阿拉伯数字及一些常用的标点符号等。 1. **空格 (space)**:ASCII码为32(0x20),代表空格。 2. **感叹...

    ascii码表

    - **数字0-9(48-57)**:值分别为48至57,用于表示阿拉伯数字。 - **冒号(:,58)**:值为58,标点符号。 - **分号(;,59)**:值为59,标点符号。 - **小于号(&lt;,60)**:值为60,数学符号。 - **等于号(=,61...

    ASCII码表

    它最初被设计为7位的编码,用于标准的128种符号,包括了大小写的英文字母、阿拉伯数字、标点符号以及控制字符。 #### 控制字符与通讯专用字符 ASCII码的前34个字符(0~32号及第127号)主要作为控制字符或通讯专用...

    VB各种字符的说明-chr()

    1. `Chr("0")`到`Chr("9")`:这些是数字字符,它们分别代表0到9的阿拉伯数字。 2. `Chr("10")`:这是一个换行符,用于在文本中开始新的行。 3. `Chr("11")`:这是垂直制表符,通常用于文本布局,使文本在列对齐。 4....

    ASCII 字元表

    这些字符包括阿拉伯数字(0-9),大写和小写字母(A-Z,a-z),以及常见的标点符号、空白键和一些特殊符号,如下划线、括号等。这些都是可以在显示器上直接看到的字符。 下面是部分ASCII可打印字符的示例: - ...

    汇编语⾔程序设计PPT-第4章

    - **英文字母**:包括大写字母A到Z以及小写字母a到z。 - **数字字符**:0到9的阿拉伯数字。 - **算术运算符**:加号`+`、减号`-`、乘号`*`和除号`/`。 - **关系运算符**:小于号`、等于号`=`、大于号`&gt;`。 - **分隔...

Global site tag (gtag.js) - Google Analytics