Fix Utility.FormatCurrency

This commit is contained in:
2025-05-30 17:14:33 -04:00
parent f19710701b
commit bf40530170
2 changed files with 37 additions and 12 deletions

View File

@@ -525,13 +525,8 @@ namespace MarketData.Utils
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (double.NaN.Equals(number)) sb.Append("N/A"); if (double.NaN.Equals(number)) sb.Append("N/A");
else sb.Append(String.Format("{0:C}", number, new CultureInfo("en-US"))); else sb.Append(String.Format("{0:C}", number));
return sb.ToString(); return Reformat(sb.ToString(), number) ;
}
public static String FormatPrice(double price)
{
return FormatCurrency(price, 3);
} }
public static String FormatCurrency(double number,int decimals) public static String FormatCurrency(double number,int decimals)
@@ -540,8 +535,25 @@ namespace MarketData.Utils
String currencyFormat="{0:C"+decimals+"}"; String currencyFormat="{0:C"+decimals+"}";
if (double.NaN.Equals(number))sb.Append("N/A"); if (double.NaN.Equals(number))sb.Append("N/A");
else sb.Append(String.Format(currencyFormat, number)); else sb.Append(String.Format(currencyFormat, number));
return sb.ToString(); return Reformat(sb.ToString(), number);
} }
// This is a workaround for ARM64 architecture where the leading and trailing parens are omitted for negative numbers
private static String Reformat(String str, double number)
{
if (String.IsNullOrEmpty(str)) return str;
if (number < 0.00 && !str.StartsWith("("))
{
return "(" + str + ")";
}
return str;
}
public static String FormatPrice(double price)
{
return FormatCurrency(price, 3);
}
public static String FormatPercent(double number) public static String FormatPercent(double number)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

View File

@@ -290,19 +290,32 @@ namespace MarketData.Utils
} }
public static String FormatCurrency(double number) public static String FormatCurrency(double number)
{ {
StringBuilder sb=new StringBuilder(); StringBuilder sb = new StringBuilder();
if (double.NaN.Equals(number))sb.Append("N/A"); if (double.NaN.Equals(number)) sb.Append("N/A");
else sb.Append(String.Format("{0:C}", number)); else sb.Append(String.Format("{0:C}", number));
return sb.ToString(); return Reformat(sb.ToString(), number) ;
} }
public static String FormatCurrency(double number,int decimals) public static String FormatCurrency(double number,int decimals)
{ {
StringBuilder sb=new StringBuilder(); StringBuilder sb=new StringBuilder();
String currencyFormat="{0:C"+decimals+"}"; String currencyFormat="{0:C"+decimals+"}";
if (double.NaN.Equals(number))sb.Append("N/A"); if (double.NaN.Equals(number))sb.Append("N/A");
else sb.Append(String.Format(currencyFormat, number)); else sb.Append(String.Format(currencyFormat, number));
return sb.ToString(); return Reformat(sb.ToString(), number);
} }
// This is a workaround for ARM64 architecture where the leading and trailing parens are omitted for negative numbers
private static String Reformat(String str, double number)
{
if (String.IsNullOrEmpty(str)) return str;
if (number < 0.00 && !str.StartsWith("("))
{
return "(" + str + ")";
}
return str;
}
public static String FormatPercent(double number) public static String FormatPercent(double number)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();