Skip to content

Instantly share code, notes, and snippets.

@alexcmgit
Created February 10, 2021 23:04
Show Gist options
  • Select an option

  • Save alexcmgit/978a10342aaa362da70a227bae35455a to your computer and use it in GitHub Desktop.

Select an option

Save alexcmgit/978a10342aaa362da70a227bae35455a to your computer and use it in GitHub Desktop.
import 'dart:math' as math;
void main() {
var tests = [
{'num': 1234, 'digits': 1},
{'num': 100000000, 'digits': 1},
{'num': 299792458, 'digits': 1},
{'num': 759878, 'digits': 1},
{'num': 759878, 'digits': 0},
{'num': 123, 'digits': 1},
{'num': 123.456, 'digits': 1},
{'num': 123.456, 'digits': 2},
{'num': 123.456, 'digits': 4}
];
for (var i = 0; i < tests.length; i++) {
print(
'''nFormatter(${tests[i]["num"]}, ${tests[i]["digits"]}) = ${nFormatter(tests[i]["num"], tests[i]["digits"], formatResult: (value) => truncateToDecimalPlaces(value, tests[i]["digits"]))}''',
);
}
}
double truncateToDecimalPlaces(num value, int fractionalDigits) {
final base = value * math.pow(10, fractionalDigits);
return base.truncate() / math.pow(10, fractionalDigits);
}
String nFormatter(
num value,
int digits, {
num Function(double v) formatResult,
}) {
const si = [
{'value': 1, 'symbol': ''},
{'value': 1E3, 'symbol': 'K'},
{'value': 1E6, 'symbol': 'M'},
{'value': 1E9, 'symbol': 'G'},
{'value': 1E12, 'symbol': 'T'},
{'value': 1E15, 'symbol': 'P'},
{'value': 1E18, 'symbol': 'E'}
];
var regex = RegExp(r'\.0+$|(\.[0-9]*[1-9])0+$');
var i;
for (i = si.length - 1; i > 0; i--) {
if (value >= si[i]['value']) break;
}
final v = (value / si[i]['value']);
final asString =
'''${formatResult != null ? formatResult(v) : v.toStringAsFixed(digits)}''';
return asString.replaceAll(regex, '') + si[i]['symbol'];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment