今天需要完成一个货币类型转换为英文的功能,以下代码可以完成!
package com.mupd.export.dao;
public class NumberParser {
public static void main(String[] args) {
System.out.println( NumberParser.parse("41.12"));
}
public static String parse(String x) {
int z = x.indexOf("."); // 取小数点位置
String lstr = "", rstr = "";
if (z > -1) { // 看是否有小数,如果有,则分别取左边和右边
lstr = x.substring(0, z);
rstr = x.substring(z + 1);
} else // 否则就是全部
lstr = x;
String lstrrev = reverse(lstr); // 对左边的字串取反
String[] a = new String[5]; // 定义5个字串变量来存放解析出来的叁位一组的字串
switch (lstrrev.length() % 3) {
case 1 :
lstrrev += "00";
break;
case 2 :
lstrrev += "0";
break;
}
String lm = ""; // 用来存放转换後的整数部分
for (int i = 0; i < lstrrev.length() / 3; i++) {
a[i] = reverse(lstrrev.substring(3 * i, 3 * i + 3)); // 截取第一个叁位
if (!a[i].equals("000")) { // 用来避免这种情况:1000000 = one million thousand only
if (i != 0)
lm = transThree(a[i]) + " " + parseMore(String.valueOf(i)) + " " + lm; // 加: thousand、million、billion
else
lm = transThree(a[i]); // 防止i=0时, 在多加两个空格.
} else
lm += transThree(a[i]);
}
String xs = ""; // 用来存放转换後小数部分
if (z > -1)
xs = "AND CENTS " + transTwo(rstr) + " "; // 小数部分存在时转换小数
return lm.trim() + " " + xs + "ONLY";
}
private static String parseFirst(String s) {
String[] a =
new String[] { "", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE" };
return a[Integer.parseInt(s.substring(s.length() - 1))];
}
private static String parseTeen(String s) {
String[] a =
new String[] {
"TEN",
"ELEVEN",
"TWELEVE",
"THIRTEEN",
"FOURTEEN",
"FIFTEEN",
"SIXTEEN",
"SEVENTEEN",
"EIGHTEEN",
"NINETEEN" };
return a[Integer.parseInt(s) - 10];
}
private static String parseTen(String s) {
String[] a =
new String[] {
"TEN",
"TWENTY",
"THIRTY",
"FORTY",
"FIFTY",
"SIXTY",
"SEVENTY",
"EIGHTY",
"NINETY" };
return a[Integer.parseInt(s.substring(0, 1)) - 1];
}
// 两位
private static String transTwo(String s) {
String value = "";
// 判断位数
if (s.length() > 2)
s = s.substring(0, 2);
else if (s.length() < 2)
s = "0" + s;
if (s.startsWith("0")) // 07 - seven 是否小於10
value = parseFirst(s);
else if (s.startsWith("1")) // 17 seventeen 是否在10和20之间
value = parseTeen(s);
else if (s.endsWith("0")) // 是否在10与100之间的能被10整除的数
value = parseTen(s);
else
value = parseTen(s) + " " + parseFirst(s);
return value;
}
private static String parseMore(String s) {
String[] a = new String[] { "", "THOUSAND", "MILLION", "BILLION" };
return a[Integer.parseInt(s)];
}
// 制作叁位的数
// s.length = 3
private static String transThree(String s) {
String value = "";
if (s.startsWith("0")) // 是否小於100
value = transTwo(s.substring(1));
else if (s.substring(1).equals("00")) // 是否被100整除
value = parseFirst(s.substring(0, 1)) + " HUNDRED";
else
value = parseFirst(s.substring(0, 1)) + " HUNDRED AND " + transTwo(s.substring(1));
return value;
}
private static String reverse(String s) {
char[] aChr = s.toCharArray();
StringBuffer tmp = new StringBuffer();
for (int i = aChr.length - 1; i >= 0; i--) {
tmp.append(aChr[i]);
}
return tmp.toString();
}
}
分享到:
相关推荐
如何将数字型转换成货币型
java钱币小写转换大写
java编写的 阿拉伯数字转换成相应的人民币汉字类
自己的一个java程序,可以把数字转换成大写. 例如:1转换输出 壹元.
输入阿拉伯数字的钱币,将其转换为中文,比如1000=一千整;231.01=两百三十一元零一分
Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 ...
该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...
适用于C ++ 11,Java,JavaScript和Python的索罗斯解释器 Language-neutral NUMBERTEXT and MONEYTEXT functions for LibreOffice Calc version 1.0.7 (2021-01-31) Numbertext LibreOffice extension, Soros ...
将数字(数字)转换为相应的文本。 例子: 1个 21 - 二十一 1,120.34 - 一千一百二十三十四 它还允许转换日期和货币金额。 如何使用: // Conversor de número a texto Number2Text conversor = new Number2...
汉语中数字大写,把输入的金额转换为汉语中人民币的大写,汉语中货币单位大写,金额的精度,"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖
2.8 XSL转换 第三章 网络 3.1 连接到服务器 3.1.1 套接字超时 3.1.2 因特网地址 3.2 实现服务器 3.2.1 为多个客户端服务 3.2.2 半关闭 3.3 可中断套接字 3.4 发送E-Mail 3.5 建立URL连接 3.5.1 URL和URI 3.5.2 使用...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
目前为止,货币格式化最简单的方式是调用 NumberFormat.getCurrencyInstance() 获得 NumberFormat 实例来把数字格式化为货币格式的字符串(当然也可以把字符串转换成数字)。可以根据当前设备的位置来获取 java.util...
一、国际化的相关知识 1、什么是国际化。...4、数字的格式化:货币 5、批量国际化MessageFormat 占位符:aaaa{索引,类型,样式} 索引:0... 类型:date、time、number等 样式: 6、JSTL中的fmt标签
ICU4C 是ICU 在 C/C++ 平台下的版本,它提供了 C/C++ 平台强大的国际化开发能力,它可以帮助开发人员根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息格式化和解析,对字符串进行大小写转换、整理、...
货币的枚举,并具有在数字和字符代码之间转换的简单方法、使用每种货币的地区列表、符号和货币的英文名称。 这方面的数据来自 Country枚举是从唯一的依赖项 - 板条箱重新导出的。 特征 crate 只有一个可选功能 - ...
包含了货币工具类(将数字货币转成大写)、日期工具类(日期格式化、日期相加减、日期差等)、半角和全角字符相互转换、JSON工具类(利用gson工具包)、字符串工具类(非空判断等)