using System.Globalization;
public static void Main()
Console.WriteLine(ToNullableDecimalOld("5") ?? 0);
Console.WriteLine(ToNullableDecimalOld("5.5") ?? 0);
Console.WriteLine(ToNullableDecimalOld("5,5") ?? 0);
Console.WriteLine(ToNullableDecimalOld("$5.5") ?? 0);
Console.WriteLine(ToNullableDecimalOld("$5,5") ?? 0);
Console.WriteLine(ToNullableDecimalOld("$5.5", true) ?? 0);
Console.WriteLine(ToNullableDecimalOld("$5,5", true) ?? 0);
Console.WriteLine(ToNullableDecimalNew("6") ?? 0);
Console.WriteLine(ToNullableDecimalNew("6.6") ?? 0);
Console.WriteLine(ToNullableDecimalNew("6,6") ?? 0);
Console.WriteLine(ToNullableDecimalNew("$6.6") ?? 0);
Console.WriteLine(ToNullableDecimalNew("$6,6") ?? 0);
Console.WriteLine(ToNullableDecimalNew("$6.6", true) ?? 0);
Console.WriteLine(ToNullableDecimalNew("$6,6", true) ?? 0);
public static decimal? ToNullableDecimalOld(string str, bool allowCurrency = false)
=> decimal.TryParse(str, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out var parsedValue)
: decimal.TryParse(str, NumberStyles.Float, new CultureInfo("de-DE").NumberFormat, out parsedValue)
? decimal.TryParse(str, NumberStyles.Currency, CultureInfo.InvariantCulture.NumberFormat, out parsedValue)
: decimal.TryParse(str, NumberStyles.Currency, new CultureInfo("en-US").NumberFormat, out parsedValue)
public static decimal? ToNullableDecimalNew(string str, bool allowCurrency = false)
=> decimal.TryParse(str, allowCurrency ? NumberStyles.Currency : NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out var parsedValue)
: decimal.TryParse(str, allowCurrency ? NumberStyles.Currency : NumberStyles.Float, new CultureInfo("de-DE").NumberFormat, out parsedValue)
: decimal.TryParse(str, allowCurrency ? NumberStyles.Currency : NumberStyles.Float, new CultureInfo("en-US").NumberFormat, out parsedValue)