toFixed static method

dynamic toFixed(
  1. dynamic v,
  2. int digits, {
  3. dynamic istrunc = true,
})

小数位控制 istrunc 默认true 超出截取,低于补0. false直接四舍五入

Implementation

static toFixed(v, int digits, {istrunc = true}) {
  if (istrunc) {
    //截断
    String numStr = v.toString();
    final maxLength = numStr.length;
    int dotIndex = numStr.indexOf('.');
    if (dotIndex == -1) {
      if(digits>0){
        return num.parse(numStr).toStringAsFixed(digits); // 无小数 补0返回
      }else{
        return numStr; // 无精度 直接返回
      }
    } else {
      //截取整数部分
      String integerPart = numStr.substring(0, dotIndex);
      //截取小数部分
      String decimalPart = numStr.substring(
          dotIndex + 1, Tools.min(maxLength, dotIndex + 1 + digits));
      //拼接结果
      String r =
          decimalPart.isNotEmpty ? '$integerPart.$decimalPart' : integerPart;
      if (decimalPart.length < digits) {
        //精度不够,通过toFixed补0
        return v.toStringAsFixed(digits);
      } else {
        //直接返回
        return r;
      }
    }
  } else {
    //四舍五入
    return v.toStringAsFixed(digits);
  }
}