Формат чисел

Flash Player 10.1 и более поздних версий, Adobe AIR 2.0 и более поздних версий

Формат отображения числовых значений изменяется в зависимости от региона. Например, здесь показано форматирование числа 123456,78 в определенных локалях:

Локаль

Формат числа

en-US (английский, США)

-123,456.78

de-DE (немецкий, Германия)

-123.456,78

fr-FR (французский, Франция)

-123 456,78

de-CH (немецкий, Швейцария)

-123'456.78

en-IN (английский, Индия)

-1,23,456.78

Большинство арабских локалей

123,456.78-

Форматы чисел зависят от множества факторов, в том числе:

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

  • Шаблоны группировки. Число знаков между каждым разделителем групп слева от десятичной запятой может быть равно двум, трем или другому значению.

  • Указатели отрицательных чисел. Отрицательные числа могут быть показаны со знаком минуса слева или справа от числа или в скобках в финансовых приложениях. Например, отрицательное число 19 может отображаться как -19, 19- или (19).

  • Нули в начале или конце. Согласно некоторым культурным нормам при отображении чисел в начало или конец добавляются нули. Например, значение 0,17 может отображаться, помимо прочего, как .17, 0.17 или 0.170.

  • Наборы символов цифр. Во многих языках, включая Хинди, арабский и японский, используются различные наборы символов цифр. Пакет flash.globalization поддерживает любые наборы символов цифр, которые можно сопоставить с цифрами 0-9.

Класс NumberFormatter позволяет учесть все эти факторы при форматировании числовых значений.

Использование класса NumberFormatter

Класс NumberFormatter форматирует числовые значения (типа int, uint или Number) в соответствии с нормами, предусмотренными для определенной локали.

В следующем примере показан самый простой способ форматирования числа с использованием свойств форматирования по умолчанию, предоставляемых операционной системой пользователя:

var nf:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT); 
trace(nf.formatNumber(-123456.789))

Результат варьируется в зависимости от пользовательских настроек локали и пользовательских предпочтений. Например, если пользовательской локалью является fr-FR, отформатированным значением будет:

-123.456,789

Если необходимо только отформатировать число в соответствии с определенной локалью вне зависимости от настроек пользователя, задайте локаль явно. Например:

var nf:NumberFormatter = new NumberFormatter("de-CH"); 
trace(nf.formatNumber(-123456.789));

В данном случае получен такой результат:

-123'456.789

В методе formatNumber() в качестве параметра используется тип Number. В классе NumberFormatter также предусмотрен метод formatInt(), использующий тип int в качестве входного значения, и метод formatUint(), работающий с типом uint.

Можно явно управлять алгоритмом форматирования путем задания свойств класса NumberFormatter, как показано в этом примере:

var nf:NumberFormatter = new NumberFormatter("de-CH"); 
nf.negativeNumberFormat = 0; 
nf.fractionalDigits = 5; 
nf.trailingZeros = true; 
nf.decimalSeparator = ","; 
nf.useGrouping = false; 
trace(nf.formatNumber(-123456.789)); //(123456.78900) 

В этом примере сначала создается объект NumberFormatter, а затем:

  • задается запись отрицательных чисел в скобках (как в финансовых приложениях);

  • задается число знаков после десятичного разделителя, равное 5;

  • задается использование нулей в конце для вывода пяти десятичных знаков;

  • задается использование запятой в качестве десятичного разделителя;

  • передаются инструкции в средство форматирования о запрете использования разделителей групп.

Примечание. При изменении некоторых из этих свойств полученный формат чисел не соответствует предпочтительному формату для указанной локали. Некоторые из этих свойств следует использовать, только если данные о локали не имеют значения, если необходимо получить полный контроль над одним аспектом формата, таким как число замыкающих нулей, или если пользователь сам запрашивает изменение, например, через панель управления Windows.

Считывание числовых значений из строк

Класс NumberFormatter также извлекает числовые значения из строк, соответствующих требованиям к форматированию для локали. Метод NumberFormatter.parseNumber() извлекает одно числовое значение из строки. Например:

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String =  "-1,234,567.890" 
var parsedNumber:Number = nf.parseNumber(inputNumberString); 
trace("Value:" + parsedNumber); // -1234567.89 
trace("Status:" + nf.lastOperationStatus); // noError

Метод parseNumber() обрабатывает строку, содержащую только цифры и символы форматирования числа, такие как знаки отрицательного числа и разделители. Если строка содержит другие символы, устанавливается код ошибки:

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String =  "The value is 1,234,567.890" 
var parsedNumber:Number = nf.parseNumber(inputNumberString); 
trace("Value:" + parsedNumber); // NaN 
trace("Status:" + nf.lastOperationStatus); // parseError

Чтобы извлечь числа из строки, содержащей дополнительные буквенные символы, используйте метод NumberFormatter.parse():

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String = "The value is 123,456,7.890"; 
var parseResult:NumberParseResult = nf.parse(inputNumberString); 
trace("Value:" + parseResult.value); // 1234567.89 
trace("startIndex: " + parseResult.startIndex); // 14 
trace("Status:" + nf.lastOperationStatus); // noError

Метод parse() возвращает объект NumberParseResult, содержащий проанализированное числовое значение в свойстве значения. Свойство startIndex показывает указатель первого найденного числового символа. Можно использовать свойства startIndex и endIndex для извлечения частей строки до или после цифр.