栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java中实现数字转换

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java中实现数字转换

这是代码,我认为SE中没有任何方法。

它基本上将数字转换为字符串并解析String并将其与权重相关联

例如

1000

1
被视为千位,由于位置而
1
映射到
"one"
千位

这是来自网站的代码:

English

import java.text.DecimalFormat;public class EnglishNumberToWords {  private static final String[] tensNames = {    "",    " ten",    " twenty",    " thirty",    " forty",    " fifty",    " sixty",    " seventy",    " eighty",    " ninety"  };  private static final String[] numNames = {    "",    " one",    " two",    " three",    " four",    " five",    " six",    " seven",    " eight",    " nine",    " ten",    " eleven",    " twelve",    " thirteen",    " fourteen",    " fifteen",    " sixteen",    " seventeen",    " eighteen",    " nineteen"  };  private EnglishNumberToWords() {}  private static String convertLessThanOneThousand(int number) {    String soFar;    if (number % 100 < 20){      soFar = numNames[number % 100];      number /= 100;    }    else {      soFar = numNames[number % 10];      number /= 10;      soFar = tensNames[number % 10] + soFar;      number /= 10;    }    if (number == 0) return soFar;    return numNames[number] + " hundred" + soFar;  }  public static String convert(long number) {    // 0 to 999 999 999 999    if (number == 0) { return "zero"; }    String snumber = Long.toString(number);    // pad with "0"    String mask = "000000000000";    DecimalFormat df = new DecimalFormat(mask);    snumber = df.format(number);    // XXXnnnnnnnnn    int billions = Integer.parseInt(snumber.substring(0,3));    // nnnXXXnnnnnn    int millions  = Integer.parseInt(snumber.substring(3,6));    // nnnnnnXXXnnn    int hundredThousands = Integer.parseInt(snumber.substring(6,9));    // nnnnnnnnnXXX    int thousands = Integer.parseInt(snumber.substring(9,12));    String tradBillions;    switch (billions) {    case 0:      tradBillions = "";      break;    case 1 :      tradBillions = convertLessThanOneThousand(billions)      + " billion ";      break;    default :      tradBillions = convertLessThanOneThousand(billions)      + " billion ";    }    String result =  tradBillions;    String tradMillions;    switch (millions) {    case 0:      tradMillions = "";      break;    case 1 :      tradMillions = convertLessThanOneThousand(millions)         + " million ";      break;    default :      tradMillions = convertLessThanOneThousand(millions)         + " million ";    }    result =  result + tradMillions;    String tradHundredThousands;    switch (hundredThousands) {    case 0:      tradHundredThousands = "";      break;    case 1 :      tradHundredThousands = "one thousand ";      break;    default :      tradHundredThousands = convertLessThanOneThousand(hundredThousands)         + " thousand ";    }    result =  result + tradHundredThousands;    String tradThousand;    tradThousand = convertLessThanOneThousand(thousands);    result =  result + tradThousand;    // remove extra spaces!    return result.replaceAll("^\s+", "").replaceAll("\b\s{2,}\b", " ");  }    public static void main(String[] args) {    System.out.println("*** " + EnglishNumberToWords.convert(0));    System.out.println("*** " + EnglishNumberToWords.convert(1));    System.out.println("*** " + EnglishNumberToWords.convert(16));    System.out.println("*** " + EnglishNumberToWords.convert(100));    System.out.println("*** " + EnglishNumberToWords.convert(118));    System.out.println("*** " + EnglishNumberToWords.convert(200));    System.out.println("*** " + EnglishNumberToWords.convert(219));    System.out.println("*** " + EnglishNumberToWords.convert(800));    System.out.println("*** " + EnglishNumberToWords.convert(801));    System.out.println("*** " + EnglishNumberToWords.convert(1316));    System.out.println("*** " + EnglishNumberToWords.convert(1000000));    System.out.println("*** " + EnglishNumberToWords.convert(2000000));    System.out.println("*** " + EnglishNumberToWords.convert(3000200));    System.out.println("*** " + EnglishNumberToWords.convert(700000));    System.out.println("*** " + EnglishNumberToWords.convert(9000000));    System.out.println("*** " + EnglishNumberToWords.convert(9001000));    System.out.println("*** " + EnglishNumberToWords.convert(123456789));    System.out.println("*** " + EnglishNumberToWords.convert(2147483647));    System.out.println("*** " + EnglishNumberToWords.convert(3000000010L));      }}

Français 与英语版本完全不同,但法语要困难得多!

package com.rgagnon.howto;import java.text.*;class FrenchNumberToWords {  private static final String[] dizaineNames = {    "",    "",    "vingt",    "trente",    "quarante",    "cinquante",    "soixante",    "soixante",    "quatre-vingt",    "quatre-vingt"  };  private static final String[] uniteNames1 = {    "",    "un",    "deux",    "trois",    "quatre",    "cinq",    "six",    "sept",    "huit",    "neuf",    "dix",    "onze",    "douze",    "treize",    "quatorze",    "quinze",    "seize",    "dix-sept",    "dix-huit",    "dix-neuf"  };  private static final String[] uniteNames2 = {    "",    "",    "deux",    "trois",    "quatre",    "cinq",    "six",    "sept",    "huit",    "neuf",    "dix"  };  private FrenchNumberToWords() {}  private static String convertZeroToHundred(int number) {    int laDizaine = number / 10;    int lUnite = number % 10;    String resultat = "";    switch (laDizaine) {    case 1 :    case 7 :    case 9 :      lUnite = lUnite + 10;      break;    default:    }    // séparateur "-" "et"  ""    String laLiaison = "";    if (laDizaine > 1) {      laLiaison = "-";    }    // cas particuliers    switch (lUnite) {    case 0:      laLiaison = "";      break;    case 1 :      if (laDizaine == 8) {        laLiaison = "-";      }      else {        laLiaison = " et ";      }      break;    case 11 :      if (laDizaine==7) {        laLiaison = " et ";      }      break;    default:    }    // dizaines en lettres    switch (laDizaine) {    case 0:      resultat = uniteNames1[lUnite];      break;    case 8 :      if (lUnite == 0) {        resultat = dizaineNames[laDizaine];      }      else {        resultat = dizaineNames[laDizaine]          + laLiaison + uniteNames1[lUnite];      }      break;    default :      resultat = dizaineNames[laDizaine]        + laLiaison + uniteNames1[lUnite];    }    return resultat;  }  private static String convertLessThanOneThousand(int number) {    int lesCentaines = number / 100;    int leReste = number % 100;    String sReste = convertZeroToHundred(leReste);    String resultat;    switch (lesCentaines) {    case 0:      resultat = sReste;      break;    case 1 :      if (leReste > 0) {        resultat = "cent " + sReste;      }      else {        resultat = "cent";      }      break;    default :      if (leReste > 0) {        resultat = uniteNames2[lesCentaines] + " cent " + sReste;      }      else {        resultat = uniteNames2[lesCentaines] + " cents";      }    }    return resultat;  }  public static String convert(long number) {    // 0 à 999 999 999 999    if (number == 0) { return "zéro"; }    String snumber = Long.toString(number);    // pad des "0"    String mask = "000000000000";    DecimalFormat df = new DecimalFormat(mask);    snumber = df.format(number);    // XXXnnnnnnnnn    int lesMilliards = Integer.parseInt(snumber.substring(0,3));    // nnnXXXnnnnnn    int lesMillions  = Integer.parseInt(snumber.substring(3,6));    // nnnnnnXXXnnn    int lesCentMille = Integer.parseInt(snumber.substring(6,9));    // nnnnnnnnnXXX    int lesMille = Integer.parseInt(snumber.substring(9,12));    String tradMilliards;    switch (lesMilliards) {    case 0:      tradMilliards = "";      break;    case 1 :      tradMilliards = convertLessThanOneThousand(lesMilliards)         + " milliard ";      break;    default :      tradMilliards = convertLessThanOneThousand(lesMilliards)         + " milliards ";    }    String resultat =  tradMilliards;    String tradMillions;    switch (lesMillions) {    case 0:      tradMillions = "";      break;    case 1 :      tradMillions = convertLessThanOneThousand(lesMillions)         + " million ";      break;    default :      tradMillions = convertLessThanOneThousand(lesMillions)         + " millions ";    }    resultat =  resultat + tradMillions;    String tradCentMille;    switch (lesCentMille) {    case 0:      tradCentMille = "";      break;    case 1 :      tradCentMille = "mille ";      break;    default :      tradCentMille = convertLessThanOneThousand(lesCentMille)         + " mille ";    }    resultat =  resultat + tradCentMille;    String tradMille;    tradMille = convertLessThanOneThousand(lesMille);    resultat =  resultat + tradMille;    return resultat;  }  public static void main(String[] args) {    System.out.println("*** " + FrenchNumberToWords.convert(0));    System.out.println("*** " + FrenchNumberToWords.convert(9));    System.out.println("*** " + FrenchNumberToWords.convert(19));    System.out.println("*** " + FrenchNumberToWords.convert(21));    System.out.println("*** " + FrenchNumberToWords.convert(28));    System.out.println("*** " + FrenchNumberToWords.convert(71));    System.out.println("*** " + FrenchNumberToWords.convert(72));    System.out.println("*** " + FrenchNumberToWords.convert(80));    System.out.println("*** " + FrenchNumberToWords.convert(81));    System.out.println("*** " + FrenchNumberToWords.convert(89));    System.out.println("*** " + FrenchNumberToWords.convert(90));    System.out.println("*** " + FrenchNumberToWords.convert(91));    System.out.println("*** " + FrenchNumberToWords.convert(97));    System.out.println("*** " + FrenchNumberToWords.convert(100));    System.out.println("*** " + FrenchNumberToWords.convert(101));    System.out.println("*** " + FrenchNumberToWords.convert(110));    System.out.println("*** " + FrenchNumberToWords.convert(120));    System.out.println("*** " + FrenchNumberToWords.convert(200));    System.out.println("*** " + FrenchNumberToWords.convert(201));    System.out.println("*** " + FrenchNumberToWords.convert(232));    System.out.println("*** " + FrenchNumberToWords.convert(999));    System.out.println("*** " + FrenchNumberToWords.convert(1000));    System.out.println("*** " + FrenchNumberToWords.convert(1001));    System.out.println("*** " + FrenchNumberToWords.convert(10000));    System.out.println("*** " + FrenchNumberToWords.convert(10001));    System.out.println("*** " + FrenchNumberToWords.convert(100000));    System.out.println("*** " + FrenchNumberToWords.convert(2000000));    System.out.println("*** " + FrenchNumberToWords.convert(3000000000L));    System.out.println("*** " + FrenchNumberToWords.convert(2147483647));      }}

你可以通过两次调用“ convert”方法来处理“ dollar and cent”转换。

String phrase = "12345.67" ;Float num = new Float( phrase ) ;int dollars = (int)Math.floor( num ) ;int cent = (int)Math.floor( ( num - dollars ) * 100.0f ) ;String s = "$ " + EnglishNumberToWords.convert( dollars ) + " and "+ EnglishNumberToWords.convert( cent ) + " cents" ;
       +

使用DBMS内置功能的另一种方式(如果可用)。对于Oracle

SQL> select to_char(to_date(873,'J'), 'JSP') as converted_form from dual;CONVERTED_FORM---------------------------EIGHT HUNDRED SEVENTY-THREESQL>'JSP' means :J : the Julian format.SP : spells the word for the number passed to to_date


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号