formatNum static method
取小数点后几位-截断保留 @param num 数值 @param location 保留几位小数 @param needThousands 是否需要千位分割。默认需要 @param remainAvailable 是否计算有效小数。默认不计算,比如0.0003,小数位是2位,true返回0.0003,false返回0 @param showBracket 小数多0是否展示括号
Implementation
static String formatNum(
String? num, {
int digit = 6,
bool needThousands = true,
remainAvailable = false,
showBracket = false,
}) {
if (num == null || num.isEmpty) return '0.00';
List<String> list = num.split(".");
String integerStr = list[0];
// 千分位分割
integerStr = needThousands ? thousands(integerStr) : integerStr;
if (digit == 0) return integerStr; // 不保留小数
// 无小数,补充小数
if (list.length == 1) {
// String decimalStr = '0' * digit;
return integerStr;
}
// 有小数的情况
String decimalStr = list[1];
// 整数部分不为0,或者不计算有效小数
if (integerStr.replaceAll('0', '').isNotEmpty || !remainAvailable) {
integerStr = needThousands ? thousands(integerStr) : integerStr;
if (decimalStr.length > digit) {
decimalStr = decimalStr.substring(0, digit); // 保留小数位
// decimalStr = decimalStr.replaceAll(RegExp(r'0*$'), ''); // 去掉尾部多余的0
return '$integerStr.$decimalStr';
}
}
// 整数部分为0
integerStr = needThousands ? thousands(integerStr) : integerStr;
// 获取小数位数前面的0
String leadingZero = RegExp(r'^0*').firstMatch(decimalStr)![0] ?? '';
if (leadingZero.length >= 5 && showBracket) {
// 前面小数位大于5,处理为 0{3} 的格式
leadingZero = '0{${leadingZero.length - 1}}';
}
decimalStr = decimalStr.replaceAll(RegExp(r'^0*'), ''); // 有效数字
if (decimalStr.length > digit) {
decimalStr = decimalStr.substring(0, digit);
decimalStr = decimalStr.replaceAll(RegExp(r'0*$'), ''); // 去掉尾部多余的0
}
return '$integerStr.$leadingZero$decimalStr';
}