在NumberFormat中为Dart更改分组分隔符

时间:2018-05-02 11:14:57

标签: dart number-formatting

我有双倍价值

double myNum = 110700.00;

我想使用NumberFormat

修改它的格式
  

110 700

怎么做?

2 个答案:

答案 0 :(得分:4)

您无法在不更改区域设置的情况下执行此操作,因为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));
    }

答案 1 :(得分:0)

对于int,您还可以使用String utils以所需的频率添加空格。似乎由于您无法选择从右边开始计算字母,因此您需要将String反转两次。

import 'package:basic_utils/basic_utils.dart';

String formatNumber(int number) {
   var s = StringUtils.reverse(number.toString());
   s = StringUtils.addCharAtPosition(s, " ", 3, repeat: true);
   return StringUtils.reverse(s);
}