Интернационализация чисел Java

Стандарты представления дат и чисел в различных странах могут существенно отличаться. Например, в Германии строка "1.234,567" воспринимается как «одна тысяча двести тридцать четыре целых пятьсот шестьдесят семь тысячных», для русских и французов данная строка просто непонятна и не может представлять число.

Чтобы сделать такую информацию конвертируемой в различные региональные стандарты, применяются возможности класса java.text.NumberFormat. Первым делом следует задать или получить текущий объект Locale с шаблонами регионального стандарта и создать с его помощью объект форматирования NumberFormat. Например:

NumberFormat nf =

NumberFormat.getInstance(new Locale("RU"));

с конкретными региональными установками или с установленными по умолчанию для приложения:

NumberFormat.getInstance();

Далее для преобразования строки в число и обратно используются методы Number parse(String source) и String format(double number) соответственно.

В предлагаемом примере производится преобразование строки, содержащей число, в три различных региональных стандарта, а затем одно из чисел преобразуется из одного стандарта в два других.

// пример # 17 : региональные представления чисел: DemoNumberFormat.java

package chapt07;

import java.text.*;

import java.util.Locale;

public class DemoNumberFormat {

public static void main(String args[]) {

NumberFormat nfGe =

NumberFormat.getInstance(Locale.GERMAN);

NumberFormat nfUs =

NumberFormat.getInstance(Locale.US);

NumberFormat nfFr =

NumberFormat.getInstance(Locale.FRANCE);

double iGe=0, iUs=0, iFr =0;

String str = "1.234,567";//строка, представляющая число

try {

//преобразование строки в германский стандарт

iGe = nfGe.parse(str).doubleValue();

//преобразование строки в американский стандарт

iUs = nfUs.parse(str).doubleValue();

//преобразование строки во французский стандарт

iFr = nfFr.parse(str).doubleValue();

} catch (ParseException e) {

e.printStackTrace();

}

System.out.printf("iGe = %f\niUs = %f\niFr = %f",

iGe, iUs, iFr);

//преобразование числа из германского в американский стандарт

String sUs = nfUs.format(iGe);

//преобразование числа из германского во французский стандарт

String sFr = nfFr.format(iGe);

System.out.println("\n" + sUs + "\n" + sFr);

}

}

Результат работы программы:

iGe = 1234,567000

iUs = 1,234000

iFr = 1,000000

1,234.567

1 234,567

Аналогично выполняются переходы от одного регионального стандарта
к другому при отображении денежных сумм.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100