Функция d3.format() предназначена для преобразования
чисел в строковое представление с заданным форматом. В библиотеке D3.js
она используется практически во всех типах визуализации:
d3.format() работает по принципу шаблонов. Формат
задаётся строкой-спецификатором.
Базовый синтаксис:
const format = d3.format("спецификатор");
format(число);
Пример:
const format = d3.format(".2f");
console.log(format(3.14159));
Результат:
3.14
Спецификатор состоит из набора символов:
[[fill]align][sign][symbol][0][width][,][.precision][type]
На практике чаще всего используются:
| Элемент | Назначение |
|---|---|
.2f |
два знака после запятой |
, |
разделитель тысяч |
% |
проценты |
$ |
валюта |
e |
экспоненциальный формат |
s |
SI-префиксы |
d |
целое число |
f |
число с фиксированной точкой |
fТип f выводит число в стандартном десятичном
формате.
const format = d3.format(".2f");
console.log(format(12.3456));
Результат:
12.35
d3.format(".0f")(12.9)
13
d3.format(".1f")(12.94)
12.9
d3.format(".3f")(12.94)
12.940
const format = d3.format(".2f");
console.log(format(-15.678));
Результат:
-15.68
Символ , добавляет разделители разрядов.
const format = d3.format(",.2f");
console.log(format(1234567.89));
Результат:
1,234,567.89
Особенно важно при отображении:
const format = d3.format(",d");
console.log(format(2500000));
Результат:
2,500,000
Тип d работает только с целыми числами.
%Символ % автоматически:
%.const format = d3.format(".1%");
console.log(format(0.756));
Результат:
75.6%
d3.format(".0%")(0.823)
82%
d3.format(".2%")(0.823)
82.30%
Часто применяется при построении:
Пример в tooltip:
const percent = d3.format(".1%");
tooltip.text(percent(value));
$const format = d3.format("$.2f");
console.log(format(1250.5));
Результат:
$1250.50
const format = d3.format("$,.2f");
console.log(format(1250000.5));
Результат:
$1,250,000.50
const format = d3.format("$,.2f");
console.log(format(-4500.75));
Результат:
−$4,500.75
d3.format() не привязан только к доллару. Символ можно
добавлять вручную.
const rub = value => `${d3.format(",.2f")(value)} ₽`;
console.log(rub(12500));
Результат:
12,500.00 ₽
eЭкспоненциальная запись используется для:
const format = d3.format(".2e");
console.log(format(123456));
Результат:
1.23e+5
const format = d3.format(".3e");
console.log(format(0.00001234));
Результат:
1.234e-5
d3.format(".1e")(15000)
1.5e+4
d3.format(".4e")(15000)
1.5000e+4
sТип s автоматически сокращает большие числа:
| Значение | Результат |
|---|---|
| 1000 | 1k |
| 1000000 | 1M |
| 1000000000 | 1G |
const format = d3.format(".2s");
console.log(format(1500));
console.log(format(2500000));
Результат:
1.5k
2.5M
Очень полезен для:
dТип d используется для вывода integer-значений.
const format = d3.format("d");
console.log(format(42));
Результат:
42
const format = d3.format(",d");
console.log(format(987654321));
Результат:
987,654,321
const format = d3.format("8.2f");
console.log(format(12.3));
Результат:
12.30
const format = d3.format("08.2f");
console.log(format(12.3));
Результат:
00012.30
const format = d3.format("<10.2f");
console.log(format(12.3));
Результат:
12.30
const format = d3.format("^10.2f");
console.log(format(12.3));
Результат:
12.30
const format = d3.format("+.2f");
console.log(format(12.3));
console.log(format(-12.3));
Результат:
+12.30
-12.30
const format = d3.format(" .2f");
console.log(format(12.3));
console.log(format(-12.3));
Результат:
12.30
-12.30
В разных странах используются разные:
Для настройки применяется d3.formatLocale().
const ru = d3.formatLocale({
decimal: ",",
thousands: " ",
grouping: [3],
currency: ["₽", ""]
});
const format = ru.format("$,.2f");
console.log(format(1234567.89));
Результат:
₽1 234 567,89
Одно из главных применений — подписи осей.
const y = d3.axisLeft(scale)
.tickFormat(d3.format(".0%"));
const y = d3.axisLeft(scale)
.tickFormat(d3.format("$,.0f"));
const x = d3.axisBottom(scale)
.tickFormat(d3.format(".2s"));
const money = d3.format("$,.2f");
tooltip.html(`
Revenue: ${money(value)}
`);
const percent = d3.format(".1%");
tooltip.text(percent(ratio));
d3.format("$,.2f")(1250000.456)
Результат:
$1,250,000.46
d3.format(".0%")(0.987)
Результат:
99%
d3.format(".4e")(123456789)
Результат:
1.2346e+8
% с уже умноженными значениямиНеправильно:
d3.format(".0%")(75)
Результат:
7500%
Правильно:
d3.format(".0%")(0.75)
d
для дробных чиселНеправильно:
d3.format("d")(12.5)
Тип d предназначен только для integer.
Для русскоязычных интерфейсов формат:
1,234,567.89
выглядит непривычно. Обычно используется:
1 234 567,89
Создание formatter-функции — сравнительно дорогая операция. Внутри
циклов лучше не вызывать d3.format() постоянно.
Неправильно:
data.forEach(d => {
console.log(d3.format(".2f")(d.value));
});
Правильно:
const format = d3.format(".2f");
data.forEach(d => {
console.log(format(d.value));
});
const money = d3.format("$,.2f");
const percent = d3.format(".1%");
const scientific = d3.format(".3e");
const compact = d3.format(".2s");
| Формат | Описание | Пример |
|---|---|---|
.2f |
фиксированная точка | 12.34 |
,.2f |
разделители тысяч | 1,234.56 |
.1% |
проценты | 75.6% |
$.2f |
валюта | $12.50 |
.2e |
экспоненциальный | 1.23e+4 |
.2s |
SI-префиксы | 1.5k |
d |
целое число | 42 |
08.2f |
заполнение нулями | 00012.30 |
+.2f |
знак числа | +12.30 |