Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Стандарты представления дат и чисел в различных странах могут существенно отличаться. Например, в Германии строка «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) соответственно.

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

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

package by.bsac.num;

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, 5"; // строка, представляющая число

try {

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

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

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

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

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

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

} catch (ParseException e) {

System.err.print(" Error position: " + e.getErrorOffset());

}

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(" \nUs " + sUs + " \nFr " + sFr);

}

}

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

iGe = 1234, 500000

iUs = 1, 234000

iFr = 1, 000000

Us 1, 234.5

Fr 1 234, 5

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.