Преобразование строки с валютой в число
подскажите как можно сделать код лучше? А именно мне не нравится вот этот кусок кода:
double balanceConvert = double.Parse(balanse.Replace("₽", "").Replace(".", ",").Trim());
Вот основной код:
//Получаю данные в таком формате
string balanse = "5000.00 ₽";
//Основной баланс
int baseBalance = 10000;
//конвертирую баланс, для дальнейшего сравнения
double balanceConvert = double.Parse(balanse.Replace("₽", "").Replace(".", ",").Trim());
if (baseBalance > balanceConvert)
{
Console.WriteLine($"[{balanceConvert}] - все норм");
}
else Console.WriteLine($"[{balanceConvert}] - необходимо пополнить баланс");
Ответы (2 шт):
Автор решения: Чирков Илья
→ Ссылка
Возможно так:
string balance = "5000.00 ₽";
double balanceConvert = double.Parse(Regex.Replace(balance, "[ ₽]", ""), CultureInfo.InvariantCulture)
Автор решения: Alexey Kurtov
→ Ссылка
Необходимо использовать NumberFormatInfo, в этом случае ваш код будет удобным для чтения, плюс закроет многие проблемы с валидацией входящих данных, так же рекомендую для манипуляций с деньгами использовать тип данных decimal. Тип double не подходит из-за его неточности.
Пример:
var balanceString = "5000.00 ₽";
var format = new NumberFormatInfo
{
CurrencySymbol = "₽",
CurrencyDecimalDigits = 2,
CurrencyDecimalSeparator = ".",
NumberDecimalSeparator = ".",
CurrencyGroupSeparator = " ",
NumberGroupSeparator = " "
};
var balance = decimal.Parse(balanceString, NumberStyles.Currency, format);
Переменную format лучше вынести в приватный, статический член типа.