Skip to content

Instantly share code, notes, and snippets.

@alexcmgit
Created February 11, 2021 16:23
Show Gist options
  • Save alexcmgit/2cc6b23f8ee2bbbfdf15841958b20f25 to your computer and use it in GitHub Desktop.
Save alexcmgit/2cc6b23f8ee2bbbfdf15841958b20f25 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},
{'num': 3321898, 'digits': 1},
{'num': 18915, 'digits': 2},
{'num': 15099, 'digits': 4},
];
for (var i = 0; i < tests.length; i++) {
print(
'''formatValue(${tests[i]["num"]}, ${tests[i]["digits"]}) = ${formatValue(tests[i]["num"])}''',
);
}
}
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'];
}
String formatValue(num value) {
final si = {
1E9: 3,
1E6: 2,
1E3: 1,
};
for (final k in si.keys) {
if (value >= k) {
return nFormatter(
value,
si[k],
formatResult: (value) => truncateToDecimalPlaces(value, si[k]),
);
}
}
return nFormatter(value, 0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment