Изменить разделитель группировки в NumberFormat для Dart - PullRequest
0 голосов
/ 02 мая 2018

У меня есть двойное значение

double myNum = 110700.00;

Я хочу изменить его формат, используя NumberFormat

110 700

Как это можно сделать?

1 Ответ

0 голосов
/ 02 мая 2018

Вы не можете сделать это без изменения локали, потому что GROUP_SEP является окончательным.

Однако, если вы не возражаете против изменения локали, что вы можете сделать в любом конкретном случае, например, с помощью new NumberFormat('###,000', 'fr'), тогда выберите любую локаль (например, французский), которая использует non-breaking space в качестве GROUP_SEP. Конечно, в результате вы получите , в качестве десятичного разделителя, но если вы его никогда не используете, то это спорный вопрос. Это работает для примера в вопросе, но не обобщает.

Можно (хотя и хрупко) определить свой собственный язык. Так что если вы являетесь англоговорящим австралийцем, который предпочитает non-breaking space в качестве разделителя группы, то определите свой собственный язык (например, zz)

import 'package:intl/intl.dart';
import 'package:intl/number_symbols_data.dart';
import 'package:intl/number_symbols.dart';

    main() {
      numberFormatSymbols['zz'] = new NumberSymbols(
        NAME: "zz",
        DECIMAL_SEP: '.',
        GROUP_SEP: '\u00A0',
        PERCENT: '%',
        ZERO_DIGIT: '0',
        PLUS_SIGN: '+',
        MINUS_SIGN: '-',
        EXP_SYMBOL: 'e',
        PERMILL: '\u2030',
        INFINITY: '\u221E',
        NAN: 'NaN',
        DECIMAL_PATTERN: '#,##0.###',
        SCIENTIFIC_PATTERN: '#E0',
        PERCENT_PATTERN: '#,##0%',
        CURRENCY_PATTERN: '\u00A4#,##0.00',
        DEF_CURRENCY_CODE: 'AUD',
      );

      print(new NumberFormat('###,000', 'zz').format(110700));
    }
...