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

所属分类: 软件编程 / java 阅读数: 45
收藏 0 赞 0 分享

本文实例讲述了Java实现数字转成英文的方法。分享给大家供大家参考。具体分析如下:

英文数词,按3位3位区分

Hundred: 100
Thousand:1,000
Million: 1,000,000
Billion: 1,000,000,000
Trillion: 1,000,000,000,000
Quintillion: 1,000,000,000,000,000,000
Sextillion: 1,000,000,000,000,000,000,000
Nonillion: 1,000,000,000,000,000,000,000,000,000,000
Centillion: 1 followed by 303 zeros

所以把数字字符串按3位分割,分别解析

public class NumUtil {
 public static final String[] enNum = { // 基本数词表
 "zero", "one", "tow", "three", "four", "five", "six", "seven", "eight",
  "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
  "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
  "twenty", "", "", "", "", "", "", "", "", "", "thirty", "", "", "",
  "", "", "", "", "", "", "fourty", "", "", "", "", "", "", "", "",
  "", "fifty", "", "", "", "", "", "", "", "", "", "sixty", "", "",
  "", "", "", "", "", "", "", "seventy", "", "", "", "", "", "", "",
  "", "", "eighty", "", "", "", "", "", "", "", "", "", "ninety" };
 public static final String[] enUnit = { "hundred", "thousand", "million",
  "billion", "trillion", "quintillion" }; // 单位表
 public static void main(String[] args) {
 System.out.println(analyze(1)); // 测试数据
 System.out.println(analyze(21));
 System.out.println(analyze(105));
 System.out.println(analyze(3250));
 System.out.println(analyze(47826));
 System.out.println(analyze(56945781));
 }
 public static String analyze(long num) {
 // long型参数,
 return analyze(String.valueOf(num));
 // 因为long型有极限,所以以字符串参数方法为主
 }
 public static String analyze(String num) {
 // 数字字符串参数
 // 判断字符串是否为数字
 if (!num.matches("\\d+")) {
  return String.format("%s is not number", num);
 }
 num = num.replaceAll("^[0]*([1-9]*)", "$1");
 // 把字符串前面的0去掉
 if (num.length() == 0) {
 // 如果长度为0,则原串都是0
  return enNum[0];
 } else if (num.length() > 9) {
 // 如果大于9,即大于999999999,题目限制条件
  return "too big";
 }
 // 按3位分割分组
 int count = (num.length() % 3 == 0) ? num.length() / 3
  : num.length() / 3 + 1;
 if (count > enUnit.length) {
  return "too big";
 } // 判断组单位是否超过,
 // 可以根据需求适当追加enUnit
 String[] group = new String[count];
 for (int i = num.length(), j = group.length - 1; i > 0; i -= 3) {
  group[j--] = num.substring(Math.max(i - 3, 0), i);
 }
 StringBuilder buf = new StringBuilder(); // 结果保存
 for (int i = 0; i < count; i++) { // 遍历分割的组
  int v = Integer.valueOf(group[i]);
  if (v >= 100) { // 因为按3位分割,所以这里不会有超过999的数
  buf.append(enNum[v / 100]).append(" ").append(enUnit[0])
   .append(" ");
  v = v % 100; // 获取百位,并得到百位以后的数
  if (v != 0) {
   buf.append("and ");
  } // 如果百位后的数不为0,则追加and
  }
  if (v != 0) { // 前提是v不为0才作解析
  if (v < 20 || v % 10 == 0) {
  // 如果小于20或10的整数倍,直接取基本数词表的单词
   buf.append(enNum[v]).append(" ");
  } else { // 否则取10位数词,再取个位数词
   buf.append(enNum[v - v % 10]).append(" ");
   buf.append(enNum[v % 10]).append(" ");
  }
  if (i != count - 1) { // 百位以上的组追加相应的单位
   buf.append(enUnit[count - 1 - i]).append(" ");
  }
  }
 }
 return buf.toString().trim(); // 返回值
 }
}

希望本文所述对大家的java程序设计有所帮助。

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多