using System.Globalization; namespace Content.Shared._NF.Bank; public static class BankSystemExtensions { public enum CurrencySymbolLocation { Default, // Dependent on local CultureInfo Prefix, // Currency symbol goes before the number Suffix // Currency symbols goes after the number } const int PrefixCurrencyPositivePattern = 0; //$N const int PrefixCurrencyNegativePattern = 1; //-$N const int SuffixCurrencyPositivePattern = 3; //N $ const int SuffixCurrencyNegativePattern = 8; //-N $ /// /// Formats a integer to the current CultureInfo's number formatting for currency. /// /// The amount to format /// The optional culture to use for formatting /// Optionally override the symbol /// Optionally override the separator /// public static string ToCurrencyString(int amount, CultureInfo? culture = null, string? symbolOverride = null, string? separatorOverride = null, CurrencySymbolLocation symbolLocation = CurrencySymbolLocation.Default) { culture ??= CultureInfo.CurrentCulture; var numberFormat = (NumberFormatInfo) culture.NumberFormat.Clone(); if (symbolOverride != null) { numberFormat.CurrencySymbol = symbolOverride; } if (separatorOverride != null) { numberFormat.CurrencyGroupSeparator = separatorOverride; } switch (symbolLocation) { case CurrencySymbolLocation.Default: break; // Do nothing case CurrencySymbolLocation.Prefix: numberFormat.CurrencyPositivePattern = PrefixCurrencyPositivePattern; numberFormat.CurrencyNegativePattern = PrefixCurrencyNegativePattern; break; case CurrencySymbolLocation.Suffix: numberFormat.CurrencyPositivePattern = SuffixCurrencyPositivePattern; numberFormat.CurrencyNegativePattern = SuffixCurrencyNegativePattern; break; } return string.Format(numberFormat, "{0:C0}", amount); } // Convenience methods for specific currencies. public static string ToIndependentString(int amount, CultureInfo? culture = null) { return ToCurrencyString(amount, culture, symbolOverride: "", symbolLocation: CurrencySymbolLocation.Prefix); //Prefix results in no space, prefer that. } public static string ToSpesoString(int amount, CultureInfo? culture = null) { return ToCurrencyString(amount, culture, symbolOverride: "$", symbolLocation: CurrencySymbolLocation.Prefix); } public static string ToDoubloonString(int amount, CultureInfo? culture = null) { return ToCurrencyString(amount, culture, symbolOverride: "DB", symbolLocation: CurrencySymbolLocation.Suffix); } public static string ToFUCString(int amount, CultureInfo? culture = null) { return ToCurrencyString(amount, culture, symbolOverride: "FUC", symbolLocation: CurrencySymbolLocation.Suffix); } }