Я думаю, что у меня есть решение этой проблемы.Причина ошибки, по-видимому, связана со следующим кодом:
stringValue = currency.ToString("#,###.##", ci);
Формат "#, ###. ##" преобразует строку значения "0,12" в ".12" на языке "en-US "и преобразовать значение строки" 0,12 "в", 12 "на языке" nl-NL ".Поэтому я добавлю этот код после него:
if (stringValue.FirstOrDefault() == '.' || stringValue.FirstOrDefault() == ',')
stringValue = $"0{stringValue}";
И функция "ConvertCultureCurrencyToString" будет переписана следующим образом:
public string ConvertCultureCurrencyToString(string stringValue, CultureInfo ci)
{
try
{
if (string.IsNullOrEmpty(stringValue))
return "0";
stringValue = Convert.ToString(stringValue, ci);
var currency = decimal.Parse(stringValue, NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, ci);
stringValue = currency.ToString("#,###.##", ci);
if (stringValue.FirstOrDefault() == '.' || stringValue.FirstOrDefault() == ',')
stringValue = $"0{stringValue}";
return stringValue;
}
catch
{
return "0";
}
}