formatDigitalMillimeter static method

String formatDigitalMillimeter(
  1. num? num, {
  2. int point = 2,
  3. String nullText = '0',
})

数字千分位格式化

num 需要进行格式化数字 point 小数点位数 nullText 为空或不是数字时默认展示文字

Implementation

static String formatDigitalMillimeter(
  num? num, {
  int point = 2,
  String nullText = '0',
}) {
  if (num is double || num is int) {
    final String str = double.parse(num.toString()).toString();
    // 分开截取
    final List<String> sub = str.split('.');
    // 处理值
    final List<String> val = List.from(sub[0].split(''));
    // 处理点(fixed-无小数点时截取报错)
    List<String> points = sub.length > 1 ? List.from(sub[1].split('')) : [];
    //处理分割符
    // ignore: avoid_multiple_declarations_per_line
    for (int index = 1, i = val.length - 1; i >= 0; index++, i--) {
      // 除以三没有余数、不等于零并且不等于1 就加个逗号
      if (index % 3 == 0 && i != 0) {
        val[i] = ',${val[i]}';
      }
    }
    // 处理小数点
    for (int i = 0; i <= point - points.length; i++) {
      points.add('0');
    }
    //如果大于长度就截取
    if (points.length > point) {
      // 截取数组
      points = points.sublist(0, point);
    }
    // 判断是否有长度
    if (points.isNotEmpty) {
      return '${val.join()}.${points.join()}';
    } else {
      return val.join();
    }
  } else {
    return nullText;
  }
}