Форматирование чисел в SAPUI5
В SAPUI5 числа представляются типами:
- sap.ui.model.type.Integer
- sap.ui.model.type.Float
Создадим проект в SAP Web IDE, чтобы вывести в различных форматах числа:
Для изучения и загрузки в SAP Web IDE вы можете скачать здесь:abc.training.test7
В представлении abc.training.test7.view.ViewMain в тегах <Text> выведем числа из JSON модели:
Модель опишем в контроллере abc.training.test7.controller.ViewMain и привяжем в функции onInit:
Также для наглядности с форматированием рассмотрите фрагмент кода с тегами <RadioButton> в проекте:
В контроллере обрабатывается событие radiobuttonselect:
Код представления abc.training.test7.view.ViewMain проекта:
- <mvc:View controllerName="abc.training.test7.controller.ViewMain" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:mvc="sap.ui.core.mvc"
- displayBlock="true" xmlns="sap.m" xmlns:form="sap.ui.layout.form">
- <App>
- <pages>
- <Page title="{i18n>title}">
- <content>
- <form:SimpleForm editable="true" width="auto" class="sapUiResponsiveMargin" layout="ResponsiveGridLayout"
- title="Форматирование чисел (min-maxIntegerDigits, min-maxFractionDigits)">
- <form:content>
- <RadioButtonGroup id="rbgid" columns="1" width="auto" class="sapUiMediumMarginBottom" selectedIndex="3" select="radiobuttonselect">
- <buttons>
- <RadioButton id="RB1" text="Число 1.1. Формат minIntegerDigits: 3, minFractionDigits: 2" />
- <RadioButton id="RB2" text="Число 1234.567. Формат minIntegerDigits: 3, maxFractionDigits: 4" />
- <RadioButton id="RB3" text="Число 123456.56789. Формат maxIntegerDigits: 5, maxFractionDigits: 4" />
- <RadioButton id="RB4" text="Обнуление" />
- </buttons>
- </RadioButtonGroup>
- <Text id="mytxt" text="0"/>
- </form:content>
- </form:SimpleForm>
- <form:SimpleForm editable="true" width="auto" class="sapUiResponsiveMargin"
- layout="ResponsiveGridLayout" labelSpanL="3" labelSpanM="3" emptySpanL="4"
- emptySpanM="4" columnsL="1" columnsM="1" title="Форматирование чисел">
- <form:content>
- <Label text="С группировкой разрядов"/>
- <Text
- text="{ path: '/floatVal', type: 'sap.ui.model.type.Float',
- formatOptions: { groupingEnabled: true, groupingSeparator: ',', decimalSeparator: '.' } }"/>
- <Label text="2 десятичных разряда"/>
- <Text
- text="{ path: '/floatVal', type: 'sap.ui.model.type.Float',
- formatOptions: { maxFractionDigits: 2, groupingEnabled: false, groupingSeparator: ',', decimalSeparator: '.' } }"/>
- <Label text="C ведущими нулями"/>
- <Text
- text="{ path: '/floatVal', type: 'sap.ui.model.type.Float',
- formatOptions: { minIntegerDigits: 20, groupingEnabled: false, groupingSeparator: ',', decimalSeparator: '.' } }"/>
- </form:content>
- </form:SimpleForm>
- </content>
- </Page>
- </pages>
- </App>
- </mvc:View>
Код контроллера abc.training.test7.controller.ViewMain проекта:
- sap.ui.define([
- "sap/ui/core/mvc/Controller",
- "sap/ui/model/json/JSONModel"
- ], function(Controller, JSONModel) {
- "use strict";
- return Controller.extend("abc.training.test7.controller.ViewMain", {
- _data: {
- "floatVal": "121464562246.24893",
- "number": "987.741"
- },
- onInit: function(evt) {
- var oModel = new JSONModel(this._data);
- this.getView().setModel(oModel);
- },
- radiobuttonselect: function(evt) {
- var txt = evt.getParameter('selectedIndex');
- var oLocale = new sap.ui.core.Locale("ru-RU");
- var oFormatOptions = {
- minIntegerDigits: 3,
- maxIntegerDigits: 5,
- minFractionDigits: 2,
- maxFractionDigits: 4
- };
- var oFloatFormat = sap.ui.core.format.NumberFormat.getFloatInstance(oFormatOptions, oLocale);
- switch(txt) {
- case 0:
- this.getView().byId("mytxt").setText(oFloatFormat.format(1.1));
- break;
- case 1:
- this.getView().byId("mytxt").setText(oFloatFormat.format(1234.567));
- break;
- case 2:
- this.getView().byId("mytxt").setText(oFloatFormat.format(123456.56789));
- break;
- case 3:
- this.getView().byId("mytxt").setText(0);
- break;
- default:
- break;
- }
- }
- });
- });
Параметры formatOptions
- minIntegerDigits: минимальное количество целых цифр. Если в числе меньше целочисленных цифр, чем указанно в данном параметре, то в начало будут добавлены нули. Смотрите пример выше “C ведущими нулями”.
- maxIntegerDigits: максимальное количество целых цифр. Если в числе целых чисел больше, чем указанно в данном параметре, то все целые цифры будут заменены на “?”.
- minFractionDigits: минимальное количество цифр в дробной части числа. Если в числе меньше дробных цифр, чем значение данного параметра, то будут добавлены нули.
- maxFractionDigits: максимальное количество цифр в дробной части числа. Если в числе больше дробных цифр, чем значение данного параметра, то эти цифры будут исключены, а наименьшая значащая цифра округляется (вычисляется с использованием roundingMode).
- decimals: число дробных цифр.
- precision: количество цифр, используемых для отображения числа. Например, если установить данный параметр = 5, то итоговое число может быть 1.3456 или 134.45.
- shortDecimals: количество цифр в сокращенном числе. Если параметр style не задан как short, то используется значение из decimals.
- groupingEnabled определяет, будут ли целая часть числа разделена на группы, которые разделены параметром groupingSeparator.
- groupingType определяет тип группировки. Здесь можно установить либо Arabic, либо Indian.
- groupingSeparator определяет разделитель группировки.
- decimalSeparator определяет символ десятичной точки.
- groupingSize размер групп.
- groupingBaseSize определяет определенный размер группы, если она отличается от размера группировки (например, Indian).
- plusSign – знак плюса.
- minusSign – знак минуса.
- roundingMode параметр, отвечающий за то, как будут округляться числа. округления для отбрасывания цифр после максимальных десятичных цифр, определяемых maxFractionDigits или десятичными знаками. Округление будет применяться только в том случае, если значение форматирования имеет номер типа.
Примеры форматирования чисел:
- var oLocale = new sap.ui.core.Locale("en-US");
- var oFormatOptions = {
- style: "short",
- decimals: 1,
- shortDecimals: 2
- };
- var oFloatFormat = sap.ui.core.format.NumberFormat.getFloatInstance(oFormatOptions, oLocale);
- oFloatFormat.format(1234.56); // результат - 1.23K (применяется параметр shortDecimals)
- oFloatFormat.format(123.456); // результат - 123.5 (число не "короткое", применяется параметр decimals)
- var oLocale = new sap.ui.core.Locale("en-US");
- var oFormatOptions = {
- minIntegerDigits: 3,
- maxIntegerDigits: 5,
- minFractionDigits: 2,
- maxFractionDigits: 4
- };
- var oFloatFormat = sap.ui.core.format.NumberFormat.getFloatInstance(oFormatOptions, oLocale);
- oFloatFormat.format(1.1); // результат - 001.10
- oFloatFormat.format(1234.567); // результат - 1,234.567
- oFloatFormat.format(123456.56789); // результат - ??,???.5679
Форматирования “ценовых” чисел:
- showMeasure — показывать единицу измерения числа.
- currencyCode — использовать код или символ, только при установке showMeasure в true.
- currencyContext определяет, какой шаблон используется для форматирования номера валюты. Может использоваться либо standard, либо accounting.
Пример:
- var oLocale = new sap.ui.core.Locale("en-US");
- var oFormatOptions = {
- showMeasure: true,
- currencyCode: false,
- currencyContext: 'standard'
- };
- var oCurrencyFormat = sap.ui.core.format.NumberFormat.getCurrencyInstance(oFormatOptions, oLocale);
- oCurrencyFormat.format(1234.567, "USD"); // результат US$1,234.57 (дробная часть по умолчанию = 2 для USD)
- oCurrencyFormat.format(1234.567, "JPY"); // результат JP¥1,235 (дробная часть по умолчанию = 0 для JPY)
- oFormatOptions = {
- showMeasure: true,
- currencyCode: true,
- currencyContext: 'standard'
- };
- oCurrencyFormat = sap.ui.core.format.NumberFormat.getCurrencyInstance(oFormatOptions, oLocale);
- oCurrencyFormat.format(1234.567, "USD"); // результат - USD1,234.57 (вместо символа валюты используется код валюты)
- oCurrencyFormat.format(1234.567, "JPY"); // результат JPY1,235 (вместо символа валюты используется код валюты)
Форматирование чисел Integer
В проекте нет форматирование чисел типа Integer, вот добавил фрагмент кода для type: sap.ui.model.type.Integer. Можете скопировать в проект и увидеть результат работы.
- <Label text="Число в формате Integer"/>
- <Text
- text="{ path: '/floatVal', type: 'sap.ui.model.type.Integer',
- formatOptions: { groupingEnabled: true, groupingSeparator: ','},
- constraints: {minimum: 1, maximum: 5000000 } }"/>
Подробней про все параметры числовых форматов можно найти здесь — https://openui5.hana.ondemand.com/#/api/sap.ui.core.format.NumberFormat.