求如何把一个int类型的数,比如int i =123456转化成十二万三千四百五十六?
解决方案 »
- 初学者实现为JTabbedPane添加关闭按钮
- 纠结啊,在线等解答...
- 如何用java把经纬度转成屏幕坐标显示在屏幕上
- Class类型转换的一个问题
- Swing 界面风格的问题
- 怎么在SWING里面添加图片,
- JAVA 中如何判断当前浏览器的语言
- 一个java初学者的菜鸟问题,期盼您的帮助,看看我这错在什么地方。。。。。
- 我发现在editplus上可以直接编译并且运行java程序
- 问个菜问题,JB7里的划中线的方法如何使用!
- 请问大神下面的异常时persistence.xml的那个地方出错了吗?新手,请求解答!
- 求java高手解释一下Integer的等于判断,本人学习java也有一定水平,实在费解
public static char[] numberTable = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};
public static char[] unitTable = {' ', '万', '亿', '万'};
public static boolean debug = false; public static void main(String[] args) {
debug = false; System.out.println(chineseNumber(6001343463100001L));
System.out.println(chineseNumber(6001040000346311L));
System.out.println(chineseNumber(6001003463100031L));
System.out.println(chineseNumber(69213434631L));
System.out.println(chineseNumber(213434631));
System.out.println(chineseNumber(201434631));
System.out.println(chineseNumber(200000000));
System.out.println(chineseNumber(201000100));
System.out.println(chineseNumber(200000100));
System.out.println(chineseNumber(3434631));
System.out.println(chineseNumber(5032));
System.out.println(chineseNumber(5002));
System.out.println(chineseNumber(5000));
System.out.println(chineseNumber(100));
System.out.println(chineseNumber(102));
System.out.println(chineseNumber(552));
System.out.println(chineseNumber(50));
System.out.println(chineseNumber(52));
System.out.println(chineseNumber(5));
System.out.println(chineseNumber(0)); System.out.println(chineseNumber(999990));
System.out.println(chineseNumber(6001343463100009L));
System.out.println(chineseNumber(6001003463100031L));
System.out.println(chineseNumber(9999999999999999L));
System.out.println(chineseNumber(9000000000101009L));
System.out.println(chineseNumber(9000000000009888L));
System.out.println(chineseNumber(-9000000000009888L));
} /**
* [-9999万亿, 9999万亿]之间的整数的中文表示
* @param n 是一个[-9999万亿, -9999万亿]之间的整数
* @return 返回阿拉伯数字的中文表示
*/
public static String chineseNumber(long n) {
// 判断是否超出能表示的范围
if (n < -9999999999999999L || n > 9999999999999999L) {
throw new RuntimeException("Out of range [-9999999999999999L, 9999999999999999L] exception");
} if (n == 0) { return "零"; } // 处理负数
boolean negative = n < 0 ;
n = n < 0 ? -n : n; int unitIndex = 0;
String result = "";
Stack<String> stack = new Stack<String>(); do {
// 从后向前,每4位数字转换一次,即[0, 9999]
int t = (int) (n % 10000);
n /= 10000;
stack.push((t < 1000 ? "零" : "") + thousandToString(t) + unitTable[unitIndex++]);
} while (n > 0); while (!stack.isEmpty()) {
result += stack.pop();
} trace("\n" + (negative ? "负" : "") + result);
result = (negative ? "负" : "") + normalize(result); return result;
} /**
* [0, 9999]的整数的中文表示
* @param thousand 是一个[0, 9999]的整数
* @return 返回阿拉伯数字的中文表示
*/
public static String thousandToString(int thousand) {
if (thousand == 0) { return "零"; }
String result = ""
+ numberTable[thousand / 1000] + "千"
+ numberTable[thousand % 1000 / 100] + "百"
+ numberTable[thousand % 100 / 10] + "十"
+ numberTable[thousand % 10];
return normalize(result);
} /**
* 把整数表示中不合适的部分过滤掉,
* 例如: 零千零百零十二亿零千一百零十零万零千一百零十零
* 应为: 二亿零一百万零一百
* @param text 数字的中文表示
* @return 返回正确的中文表示
*/
public static String normalize(String text) {
text = text.replaceAll("\\s+", "");
text = text.replaceAll("(零十|零百|零千|零万)", "零");
text = text.replaceAll("零+亿", "亿"); // 亿是最大的单位
text = text.replaceAll("零+", "零");
text = text.replaceAll("(^零|零$)", ""); return text;
} public static void trace(String text) {
if (debug) {
System.out.println(text);
}
}
}输出:
六千零一万三千四百三十四亿六千三百一十万零一
六千零一万零四百亿零三十四万六千三百一十一
六千零一万零三十四亿六千三百一十万零三十一
六百九十二亿一千三百四十三万四千六百三十一
二亿一千三百四十三万四千六百三十一
二亿零一百四十三万四千六百三十一
二亿
二亿零一百万零一百
二亿零一百
三百四十三万四千六百三十一
五千零三十二
五千零二
五千
一百
一百零二
五百五十二
五十
五十二
五
零
九十九万九千九百九十
六千零一万三千四百三十四亿六千三百一十万零九
六千零一万零三十四亿六千三百一十万零三十一
九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九
九千万亿零一十万一千零九
九千万亿零九千八百八十八
负九千万亿零九千八百八十八