Scripts/Utils/Formatter.cs
using System;
using System.Globalization;
namespace Milaine.Utils;
public static class Formatter {
private static readonly string[] Suffixes = ["", "k", "M", "B", "T", "Qa", "Qi"];
/// <summary>
/// format float numbers from 1000 to 1.000
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static string ToDisplay(float val) {
string native = val.ToString("#,##0", CultureInfo.InvariantCulture);
string display = native.Replace(',', '.');
return display;
}
/// <summary>
/// format from 1000 to 1.0K
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static string ToDisplayShort(float val) {
double absVal = Math.Abs((double)val);
if (absVal < 1000d) {
return Math.Round(val).ToString(CultureInfo.InvariantCulture);
}
int magnitude = (int)Math.Log(absVal, 1000d);
magnitude = Math.Min(magnitude, Suffixes.Length - 1);
double scaled = val / Math.Pow(1000d, magnitude);
if (Math.Round(scaled, 1) >= 1000d && magnitude < Suffixes.Length - 1) {
magnitude++;
scaled = val / Math.Pow(1000d, magnitude);
}
string number = scaled.ToString("0.0", CultureInfo.InvariantCulture);
return $"{number}{Suffixes[magnitude]}";
}
}