flutter 数字格式-货币

e5nszbig  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(173)

我的代码有问题。我发送了一个数字,但格式不起作用。
我的密码是下一个。

class SetValueClass extends HelperClass {
  SetValueClass() : super();

  String transformValue({
    required double number,
    bool? pasa,
  }) {
    number = 27126677097.04;
    SuffixOptions suffixOptions = getSuffixObject(number);

    if (pasa != null && pasa) {
      print(number);
      print(suffixOptions.name);
      print(suffixOptions.format);
      print(suffixOptions.number);
      print(suffixOptions.suffix);
    }

    final numberFormat = NumberFormat.currency(
      locale: 'es_CO',
      // customPattern: '',
      symbol: suffixOptions.suffix,
    );

    numberFormat.maximumFractionDigits = suffixOptions.format['maximumFractionDigits']!;
    numberFormat.minimumFractionDigits = suffixOptions.format['minimumFractionDigits']!;

    return numberFormat.format(number);
  }
}

我想要的最终结果是将27126677097.04解析为27,127 MM,但y收到的结果是... 27.126.677.097,04 MM
符号是成功地工作,但是,我怎么能压缩这个数字,并返回27,127毫米?
注意:区域设置es_CO是哥伦比亚的代码。
谢谢!

qacovj5a

qacovj5a1#

经过一番研究之后,我意识到es_CO没有按照我需要的方式工作,所以我决定采用下面的解决方案。
创建一个函数。

String _defineValue({required number}) {
    /**
     * Valor en el rango de cuatrillones.
     * (C)
     */
    if (number > 1e+24) {
      return "${(number / 1e+24).toStringAsFixed(2)} C";
    }

    /**
     * Valor en el rango de miles de trillones.
     * (MT)
     */
    if (number > 1e+21) {
      return "${(number / 1e+21).toStringAsFixed(3)} MT";
    }

    /**
     * Valor en el rango de trillones.
     * (T)
     */
    if (number > 1e+18) {
      return "${(number / 1e+18).toStringAsFixed(2)} T";
    }

    /**
     * Valor en el rango de miles de billones.
     * (MB)
     */
    if (number > 1e+15) {
      return "${(number / 1e+15).toStringAsFixed(3)} MB";
    }

    /**
     * Valor en el rango de billones.
     * (MB)
     */
    if (number > 1e+12) {
      return "${(number / 1e+12).toStringAsFixed(2)} B";
    }

    /**
     * Valor en el rango de miles de millones.
     * (MM)
     */
    if (number > 1e+9) {
      return "${(number / 1e+9).toStringAsFixed(3)} MM";
    }

    /**
     * Valor en el rango de millones.
     * (M)
     */
    if (number > 1e+6) {
      return "${(number / 1e+6).toStringAsFixed(2)} M";
    }

    /**
     * Valor en el rango de inferior
    */
    return "${(number / 1).toStringAsFixed(0)}";
  }

这个函数获取一个数字,并返回一个字符串,其逻辑符合我的情况。

相关问题