formatDouble method

String formatDouble({
  1. int maxDigits = 2,
  2. bool keepFixedDigits = false,
})

Implementation

String formatDouble({int maxDigits = 2, bool keepFixedDigits = false}) {
  if (this == null) return "";

  double value = this!.toDouble();
  int p = pow(10, maxDigits).toInt();
  double rounded = (value * p).roundToDouble() / p;
  String str = rounded.toString();

  // 处理小数点
  int index = str.indexOf('.');
  if (index == -1) {
    // 没有小数点时
    return keepFixedDigits ? "$str.${'0' * maxDigits}" : str;
  } else {
    // 有小数点时
    String integerPart = str.substring(0, index);
    String decimalPart = str.substring(index + 1);

    if (keepFixedDigits) {
      // 保证固定位数,不足补零
      if (decimalPart.length < maxDigits) {
        decimalPart = decimalPart.padRight(maxDigits, '0');
      } else {
        decimalPart = decimalPart.substring(0, maxDigits);
      }
      return "$integerPart.$decimalPart";
    } else {
      // 移除末尾的零
      while (decimalPart.endsWith('0')) {
        decimalPart = decimalPart.substring(0, decimalPart.length - 1);
      }
      return decimalPart.isEmpty ? integerPart : "$integerPart.$decimalPart";
    }
  }
}