Библиотека Globalize предоставляет инструменты для локализованного форматирования чисел, валют, дат и процентов. Процентное представление особенно важно при разработке финансовых интерфейсов, аналитических панелей, систем отчётности и статистических сервисов, где требуется корректный вывод процентных значений в зависимости от региональных стандартов.
Для работы с процентным форматированием необходимо подключить основные зависимости библиотеки и данные CLDR.
<script src="cldr.js"></script>
<script src="cldr/event.js"></script>
<script src="cldr/supplemental.js"></script>
<script src="globalize.js"></script>
<script src="globalize/number.js"></script>
Загрузка локализационных данных:
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("en"),
cldrData.entireMainFor("ru")
);
Установка текущей локали:
Globalize.locale("ru");
Для форматирования процентов используется метод
formatNumber() с параметром
style: "percent".
const value = 0.25;
const result = Globalize.formatNumber(value, {
style: "percent"
});
console.log(result);
Результат для русской локали:
25 %
Для английской локали:
Globalize.locale("en");
console.log(
Globalize.formatNumber(0.25, {
style: "percent"
})
);
Результат:
25%
Значение автоматически умножается на 100.
0.25 → 25%
Это означает:
| Исходное значение | Результат |
|---|---|
0.1 |
10% |
0.5 |
50% |
1 |
100% |
2 |
200% |
Количество знаков после запятой регулируется параметрами
minimumFractionDigits и
maximumFractionDigits.
Globalize.locale("ru");
const result = Globalize.formatNumber(0.12345, {
style: "percent",
maximumFractionDigits: 2
});
console.log(result);
Результат:
12,35 %
const result = Globalize.formatNumber(0.1, {
style: "percent",
minimumFractionDigits: 2
});
console.log(result);
Результат:
10,00 %
Настройки дробной части можно комбинировать.
const result = Globalize.formatNumber(0.123456, {
style: "percent",
minimumFractionDigits: 1,
maximumFractionDigits: 3
});
console.log(result);
Результат:
12,346 %
Процентное представление зависит от региональных стандартов.
Globalize.locale("ru");
console.log(
Globalize.formatNumber(0.25, {
style: "percent"
})
);
Результат:
25 %
Globalize.locale("en");
console.log(
Globalize.formatNumber(0.25, {
style: "percent"
})
);
Результат:
25%
Globalize.locale("fr");
console.log(
Globalize.formatNumber(0.25, {
style: "percent"
})
);
Результат:
25 %
Во французской локали используется неразрывный пробел перед символом процента.
Для многократного форматирования рекомендуется создавать форматтер заранее.
numberFormatterconst percentFormatter = Globalize.numberFormatter({
style: "percent",
maximumFractionDigits: 1
});
console.log(percentFormatter(0.123));
console.log(percentFormatter(0.987));
Результат:
12,3 %
98,7 %
Процентный стиль не ограничивает диапазон чисел.
console.log(
Globalize.formatNumber(15.75, {
style: "percent"
})
);
Результат:
1 575 %
Globalize корректно отображает отрицательные значения.
console.log(
Globalize.formatNumber(-0.35, {
style: "percent"
})
);
Результат:
-35 %
console.log(
Globalize.formatNumber(0, {
style: "percent"
})
);
Результат:
0 %
Globalize использует стандартное математическое округление.
console.log(
Globalize.formatNumber(0.126, {
style: "percent",
maximumFractionDigits: 1
})
);
Результат:
12,6 %
Другой пример:
console.log(
Globalize.formatNumber(0.125, {
style: "percent",
maximumFractionDigits: 1
})
);
Результат:
12,5 %
В некоторых случаях требуется нестандартное отображение процентов.
const percent = Globalize.formatNumber(0.73, {
style: "percent"
});
const text = `Уровень выполнения: ${percent}`;
console.log(text);
Результат:
Уровень выполнения: 73 %
const stats = [0.12, 0.34, 0.56];
const formatter = Globalize.numberFormatter({
style: "percent",
maximumFractionDigits: 0
});
const result = stats.map(formatter);
console.log(result);
Результат:
["12 %", "34 %", "56 %"]
const products = [
{ name: "A", discount: 0.15 },
{ name: "B", discount: 0.25 },
{ name: "C", discount: 0.4 }
];
const formatter = Globalize.numberFormatter({
style: "percent"
});
products.forEach(product => {
console.log(
product.name,
formatter(product.discount)
);
});
Результат:
A 15 %
B 25 %
C 40 %
const result = (0.25 * 100).toFixed(2) + "%";
Недостатки:
const result = Globalize.formatNumber(0.25, {
style: "percent",
minimumFractionDigits: 2
});
Преимущества:
Globalize поддерживает обратное преобразование строки в число.
parseNumberGlobalize.locale("ru");
const value = Globalize.parseNumber("25 %");
console.log(value);
Результат:
0.25
Globalize.locale("en");
console.log(
Globalize.parseNumber("25%")
);
Результат:
0.25
Для интенсивной обработки данных используется специализированный парсер.
const parser = Globalize.numberParser({
style: "percent"
});
console.log(parser("15 %"));
console.log(parser("75 %"));
Результат:
0.15
0.75
const input = "48 %";
const parser = Globalize.numberParser({
style: "percent"
});
const value = parser(input);
console.log(value);
Результат:
0.48
Некорректные значения могут приводить к NaN.
const parser = Globalize.numberParser({
style: "percent"
});
console.log(parser("abc"));
Результат:
NaN
Проверка:
const value = parser("abc");
if (Number.isNaN(value)) {
console.log("Некорректный процент");
}
При большом количестве операций рекомендуется:
formatNumber;for (let i = 0; i < 10000; i++) {
Globalize.formatNumber(i / 100, {
style: "percent"
});
}
const formatter = Globalize.numberFormatter({
style: "percent"
});
for (let i = 0; i < 10000; i++) {
formatter(i / 100);
}
Globalize.locale("ru");
const formatter = Globalize.numberFormatter({
style: "percent",
maximumFractionDigits: 1
});
const analytics = {
conversion: 0.1234,
retention: 0.857,
bounce: 0.432
};
console.log("Конверсия:", formatter(analytics.conversion));
console.log("Удержание:", formatter(analytics.retention));
console.log("Отказы:", formatter(analytics.bounce));
Результат:
Конверсия: 12,3 %
Удержание: 85,7 %
Отказы: 43,2 %
Globalize позволяет использовать единый механизм форматирования для разных типов данных.
const percentFormatter = Globalize.numberFormatter({
style: "percent"
});
const decimalFormatter = Globalize.numberFormatter();
console.log(percentFormatter(0.25));
console.log(decimalFormatter(0.25));
Результат:
25 %
0,25
Globalize интерпретирует:
0.25
как:
25 %
Передача значения 25 приведёт к:
2500 %
Это одна из наиболее распространённых ошибок при работе с процентами.
| Представление | Значение |
|---|---|
| 25% | 0.25 |
| 100% | 1 |
| 250% | 2.5 |
import Globalize from "globalize";
const formatter = Globalize.numberFormatter({
style: "percent",
maximumFractionDigits: 1
});
function Discount({ value }) {
return (
<span>
{formatter(value)}
</span>
);
}
export default {
methods: {
formatPercent(value) {
return Globalize.formatNumber(value, {
style: "percent"
});
}
}
};
const Globalize = require("globalize");
Globalize.locale("en");
const formatter = Globalize.numberFormatter({
style: "percent"
});
console.log(
formatter(0.45)
);
Результат:
45%