java 阿拉伯数字转英文(包含小数)

作者: adm 分类: java 发布时间: 2023-03-10

首先是整数转英文

package com.newcoder;
 
/*Task: 英文和阿拉伯数字之间的转换
 *
 * Date:2014.02.24
 *
 * */
import java.util.HashMap;
import java.util.Scanner;
public class numToEnlish {
	  public static final String ZERO = "zero";
	  public static final String NEGATIVE = "negative";
	  public static final String SPACE = " ";
	  public static final String MILLION = "million";
	  public static final String THOUSAND = "thousand";
	  public static final String HUNDRED = "hundred";
	  public static final String[] INDNUM = {"zero", "one", "two", "three", "four", "five", "six",
	    "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
	    "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
	  public static final String[] DECNUM = {"twenty", "thirty", "forty", "fifty", "sixty",
	    "seventy", "eighty", "ninety"};
 
	  //数字转换英文
	  public String format(int i) {
 
	    StringBuilder sb = new StringBuilder();
 
	    if(i == 0) {
	      return ZERO;
	    }
 
	    if(i < 0) {
	      sb.append(NEGATIVE).append(SPACE);
	      i *= -1;
	    }
 
 
	    if(i >= 1000000) {
	      sb.append(numFormat(i / 1000000)).append(SPACE).append(MILLION).append(SPACE);
	      i %= 1000000;
 
	    }
 
	    if(i >= 1000) {
	      sb.append(numFormat(i / 1000)).append(SPACE).append(THOUSAND).append(SPACE);
 
	      i %= 1000;
	    }
 
	    if(i < 1000){
	      sb.append(numFormat(i));
	    }
 
	    return sb.toString();
	  }
 
	  // 3位数转英文
	  public String numFormat(int i) {
 
	    StringBuilder sb = new StringBuilder();
 
	    if(i >= 100) {
	      sb.append(INDNUM[i / 100]).append(SPACE).append(HUNDRED).append(SPACE);
	    }
 
	    i %= 100;
 
	    if(i != 0) {
	      if(i >= 20) {
	        sb.append(DECNUM[i / 10 -2]).append(SPACE);
	        if(i % 10 != 0) {
	          sb.append(INDNUM[i % 10]);
	        }
	      }else {
	        sb.append(INDNUM[i]);
	      }
	    }
 
	    return sb.toString();
	  }
	//英文转数字
	  public int parse(String str) {
	    HashMap hm = new HashMap();
	    hm.put("zero", 0);
	    hm.put("one", 1);
	    hm.put("two", 2);
	    hm.put("three", 3);
	    hm.put("four", 4);
	    hm.put("five", 5);
	    hm.put("six", 6);
	    hm.put("seven", 7);
	    hm.put("eight", 8);
	    hm.put("nine", 9);
	    hm.put("ten", 10);
	    hm.put("eleven", 11);
	    hm.put("twelve", 12);
	    hm.put("thirteen", 13);
	    hm.put("fourteen", 14);
	    hm.put("fifteen", 15);
	    hm.put("sixteen", 16);
	    hm.put("seventeen", 17);
	    hm.put("eighteen", 18);
	    hm.put("nineteen", 19);
	    hm.put("twenty", 20);
	    hm.put("thirty", 30);
	    hm.put("forty", 40);
	    hm.put("fifty", 50);
	    hm.put("sixty", 60);
	    hm.put("seventy", 70);
	    hm.put("eighty", 80);
	    hm.put("ninety", 90);
	    hm.put("hundred", 100);
	    hm.put("thousand", 1000);
	    hm.put("million", 1000000);
	    int i = 0;
	    int b = 0;
	    int c = 0;
	    String[] k = str.split(" ");
	    for (String string : k) {
	      if("hundred".equals(string)){
	        i *= hm.get("hundred");
	      }else if("thousand".equals(string)){
	        b = i;
	        b *= hm.get("thousand");
	        i = 0;
	      }else if("million".equals(string)){
	        c = i;
	        c *= hm.get("million");
	        i = 0;
	      }else if("negative".equals(string)){
	        i = 0;
	      }else {
	        i += hm.get(string);
	      }
	    }
	    i += c + b;
	    for (String string2 : k) {
	      if("negative".equals(string2)){
	        i = -i;
	      }
	    }
	    return i;
	  }
	  
	  
	  
	  public static void main(String[] args) {
//			NumberWordFormat nwf = new NumberWordFormat();
//			System.out.println(nwf.format(1432008));
//			int  i = nwf.parse("one million four hundred thirty two thousand eight");
//			System.out.println("i="+i);
		  numToEnlish numberWordFormat = new numToEnlish();
		    Boolean flag = false;
		    Scanner sc = new Scanner(System.in);
		    try {
		      do {
		        System.out.println("请选择format还是parse,format输入1,parse输入2");
		        String input = sc.nextLine();
		        if("1".equals(input)){
		          System.out.println("您选择了format,请输入数字 (注:范围在999999999和-999999999之间):");
		          input = sc.nextLine();
		          int num = Integer.parseInt(input);
		          if(num > 999999999 || num< -999999999 || input.length() > String.valueOf(num).length()){
		            throw new NumberFormatException();
		          }
		          System.out.println("转换结果为: " + numberWordFormat.format(num));
		        }else if("2".equals(input)){
		          System.out.println("您选择了parse,请输入英文数字,注意格式(每输入一个单词后一空格):");
		          input = sc.nextLine();
		          try {
		            System.out.println("转换结果为: " + numberWordFormat.parse(input));
		          } catch (Exception e) {
		            System.out.println("请输入正确的英文单词及格式!!重新输入!!");
		          }
		        }else {
		          System.out.println("输入错误,请重新输入!!");
		        }
		        System.out.println("是否继续?");
		        input = sc.nextLine();
		        if("Y".equalsIgnoreCase(input)){
		          flag = true;
		        }else {
		          flag = false;
		        }
		      } while (flag);
		    } finally {
		      sc.close();
		    }
		  }
}
 

 

然后是小数后面的英文转换,最后一整合。

package com.newcoder;
 
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class splitNum {
 
	public static void main(String[] args) {
 
		Scanner scanner = new Scanner(System.in);
		double num = scanner.nextDouble();
		String numStr = String.valueOf(num);
		String numResult = "";
		numToEnlish numberWordFormat = new numToEnlish();
 
		numStr = subZeroAndDot(numStr);
 
		if (isInteger(numStr)) {
			// 整数
			int integer = Integer.parseInt(numStr);
 
			numStr = numberWordFormat.format(integer);
 
			System.out.println(numStr);
 
		} else {
			// 拆分成两部分,整数部分和小数部分
 
			String integerNum = splitInteger(num);
 
			int integer = Integer.parseInt(integerNum);
 
			numStr = numberWordFormat.format(integer);
 
			String decimalNum = splitNum(num);
 
			String decimal = decimalToEnlish(decimalNum);
 
			numResult = numStr + " point " + decimal;
			System.out.println(numResult + "");
 
		}
	}
 
	/**
	 * 小数部分转换成英文
	 *
	 */
	public static String decimalToEnlish(String decimalNum) {
 
		String[] enlishNum = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
 
		String decimal = "";
		int num = Integer.parseInt(decimalNum);
		int numLength = decimalNum.length();
		int[] numArr = new int[numLength];
		for (int i = 0; i < numLength; i++) {
 
			numArr[i] = (int) (num / (Math.pow(10, numLength - 1 - i)));
 
			num = (int) (num % (Math.pow(10, numLength - 1 - i)));
 
			if (numArr[i] == 0) {
				decimal += enlishNum[0] + " ";
			} else if (numArr[i] == 1) {
				decimal += enlishNum[1] + " ";
			} else if (numArr[i] == 2) {
				decimal += enlishNum[2] + " ";
			} else if (numArr[i] == 3) {
				decimal += enlishNum[3] + " ";
			} else if (numArr[i] == 4) {
				decimal += enlishNum[4] + " ";
			} else if (numArr[i] == 5) {
				decimal += enlishNum[5] + " ";
			} else if (numArr[i] == 6) {
				decimal += enlishNum[6] + " ";
			} else if (numArr[i] == 7) {
				decimal += enlishNum[7] + " ";
			} else if (numArr[i] == 8) {
				decimal += enlishNum[8] + " ";
			} else if (numArr[i] == 9) {
				decimal += enlishNum[9] + " ";
			}
		}
 
		return decimal;
	}
 
	/**
	 * 取出整数部分
	 */
	public static String splitInteger(double num) {
		String str = String.valueOf(num);
		String result = str.substring(0, str.indexOf('.'));
		return result;
	}
 
	/**
	 * 取出小数部分
	 */
	public static String splitNum(double num) {
		String str = String.valueOf(num);
		String result = str.substring(str.indexOf('.') + 1);
		return result;
	}
 
	/**
	 * 功能:检查请求isInteger方法的参数是否为整数
	 * 
	 * @param str
	 *            String
	 * @return 返回boolean类型,false表示不是整数,true表示是整数
	 */
	public static boolean isInteger(String str) {
		int begin = 0;
		if (str == null || str.trim().equals("")) {
			return false;
		}
		str = str.trim();
		if (str.startsWith("+") || str.startsWith("-")) {
			if (str.length() == 1) {
				return false;
			}
			begin = 1;
		}
		for (int i = begin; i < str.length(); i++) {
			if (!Character.isDigit(str.charAt(i))) {
				return false;
			}
		}
		return true;
	}
 
	/**
	 * 使用java正则表达式去掉多余的.与0
	 * 
	 * @param s
	 * @return
	 */
	public static String subZeroAndDot(String s) {
		if (s.indexOf(".") > 0) {
			s = s.replaceAll("0+?$", "");// 去掉多余的0
			s = s.replaceAll("[.]$", "");// 如最后一位是.则去掉
		}
		return s;
	}
 
}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!