Source: https://stackoverflow.com/a/40724354
For formatting / displaying large numbers (e.g. likes, views)
const SI_SYMBOL = ["", "k", "M", "G", "T", "P", "E"]; function abbreviateNumber(number){ // what tier? (determines SI symbol) const tier = Math.log10(Math.abs(number)) / 3 | 0; // if zero, we don't need a suffix if(tier == 0) return number; // get suffix and determine scale const suffix = SI_SYMBOL[tier]; const scale = 10 ** (tier * 3); // scale the number const scaled = number / scale; // format number and add suffix return scaled.toFixed(1) + suffix; }
Source: https://stackoverflow.com/a/60988355
ES2020 adds support for this in Intl.NumberFormat
Using notation as follows:
let formatter = Intl.NumberFormat('en', { notation: 'compact' }); // example 1 let million = formatter.format(1e6); // example 2 let billion = formatter.format(1e9); // print console.log(million == '1M', billion == '1B');
C#
private static readonly string[] SI_SYMBOL = { "", "k", "M", "G", "T", "P", "E" }; public static string AbbreviateNumber(double number) { // Controleer op ongeldige getallen if (double.IsNaN(number)) return "NaN"; if (double.IsInfinity(number)) return number > 0 ? "∞" : "-∞"; // Controleer of het getal nul is if (number == 0) return "0"; // Wat is de tier? (bepaalt SI-symbool) int tier = (int)(Math.Log10(Math.Abs(number)) / 3); // Als tier 0 is, geen suffix nodig if (tier == 0) return number.ToString(); // Beperk tier tot beschikbare SI-symbolen tier = Math.Min(tier, SI_SYMBOL.Length - 1); // Haal het suffix op en bepaal de schaal string suffix = SI_SYMBOL[tier]; double scale = Math.Pow(10, tier * 3); // Schaal het getal double scaled = number / scale; // Formatteer het getal en voeg suffix toe return $"{scaled:F1}{suffix}"; }
538000cookie-checkAbbreviate numbers (Shorten numbers)