formatDecimal function
Formats value
to a decimal value.
precision
amount of decimal places.
decimalSeparator
decimal separator, usually .
or ,
.
Implementation
String? formatDecimal(Object? value,
{int precision = 2, String decimalSeparator = '.'}) {
if (value == null) return null;
var p = parseNum(value);
if (p == null || p == 0 || p.isNaN) return '0';
if (p.isInfinite) return p.isNegative ? '-∞' : '∞';
if (precision <= 0) return p.toInt().toString();
var pStr = p.toString();
var idx = pStr.indexOf('.');
if (idx < 0) {
var eIdx = pStr.indexOf('e');
var eStr = eIdx >= 0 ? pStr.substring(eIdx) : '';
if (eStr.length > 1) {
return pStr;
} else {
return p.toInt().toString();
}
}
var integer = pStr.substring(0, idx);
var decimal = pStr.substring(idx + 1);
if (decimal.isEmpty || decimal == '0') {
return integer.toString();
}
if (decimal.length > precision) {
var eIdx = decimal.indexOf('e');
var eStr = eIdx >= 0 ? decimal.substring(eIdx) : '';
if (eStr.length > 1) {
decimal =
decimal.substring(0, Math.max(precision - eStr.length, 1)) + eStr;
} else {
decimal = decimal.substring(0, precision);
}
}
if (decimalSeparator.isEmpty) {
decimalSeparator = '.';
}
return '$integer$decimalSeparator$decimal';
}