> Java > java지도 시간 > Java의 표준 수학 라이브러리는 숫자를 단어 표현으로 변환하는 기능을 제공합니까?

Java의 표준 수학 라이브러리는 숫자를 단어 표현으로 변환하는 기능을 제공합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-30 11:14:19
원래의
397명이 탐색했습니다.

Does Java's standard math library offer a function to convert numbers to their word representations?

Java에서 숫자를 단어로 변환하는 방법

배경

현재 정적 배열을 사용하여 숫자를 단어로 변환하는 기본적인 메커니즘이 마련되어 있습니다. 숫자의 크기에 따라 영어 텍스트로 번역합니다. 그러나 이 접근 방식은 유난히 큰 수의 문제에 직면합니다.

<br>10183 = 10,183<br>90 = 90<br>5888 = 5,8888 여덟<br>

질문

이 목적으로 활용할 수 있는 수학 라이브러리에 간단한 함수가 있습니까?

답변

여기 코드가 있는데 메소드가 없는 것 같아요 SE.

기본적으로 숫자를 문자열로 변환하고 구문 분석한 후 가중치와 연관시킵니다.

예를 들어

1000<br>

1 은 천 위치로 처리되며 1은 위치로 인해 "1"과 천으로 매핑됩니다.

다음은 웹사이트의 코드입니다:

영어

<사전>
가져오기 java.text.DecimalFormat;

public class EnglishNumberToWords {

private static final String[] tensNames = {

"",
" ten",
" twenty",
" thirty",
" forty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
로그인 후 복사

};

private static 최종 문자열[] 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;
로그인 후 복사

}

공용 정적 문자열 변환(긴 숫자) {

// 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", " ");
로그인 후 복사

}

/**

  • 테스트
  • @param args
    */

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));

/*
 *** zero
 *** one
 *** sixteen
 *** one hundred
 *** one hundred eighteen
 *** two hundred
 *** two hundred nineteen
 *** eight hundred
 *** eight hundred one
 *** one thousand three hundred sixteen
 *** one million
 *** two millions
 *** three millions two hundred
 *** seven hundred thousand
 *** nine millions
 *** nine millions one thousand
 *** one hundred twenty three millions four hundred
 **      fifty six thousand seven hundred eighty nine
 *** two billion one hundred forty seven millions
 **      four hundred eighty three thousand six hundred forty seven
 *** three billion ten
 **/
로그인 후 복사

}
}

Français
영어 버전과 많이 다르지만 프랑스어가 많이 더 어려워요!


패키지 com.rgagnon.howto;

import java.text.*;

class FrenchNumberToWords {
private static final String[] dizaineNames = {

"",
"",
"vingt",
"trente",
"quarante",
"cinquante",
"soixante",
"soixante",
"quatre-vingt",
"quatre-vingt"
로그인 후 복사

} ;

비공개 정적 최종 문자열[] 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",
로그인 후 복사

위 내용은 Java의 표준 수학 라이브러리는 숫자를 단어 표현으로 변환하는 기능을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿