Как я могу принять строки типа «$ 1,250.00» и преобразовать их в десятичное число в C#?
Я просто делаю замену («$», «») и («,», «») или есть другой способ, которым я должен обрабатывать этот вид ввода?
Как я могу принять строки типа «$ 1,250.00» и преобразовать их в десятичное число в C#?
Я просто делаю замену («$», «») и («,», «») или есть другой способ, которым я должен обрабатывать этот вид ввода?
Вы пробовали Decimal.Parse с опцией AllowCurrencySymbol (и других вспомогательных опций)?
var d = Decimal.Parse(input,
NumberStyles.AllowCurrencySymbol |
NumberStyles.AllowDecimalPoint |
NumberStyles.AllowThousands);
теперь с форматированием :)
decimal val = Decimal.Parse(
Value.Replace(" ", ""),
NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint
| NumberStyles.AllowCurrencySymbol
);
ли я вобще
Replace("$", "")
иReplace(",", "")
[?]
No. Для одного кода, как это не интересно поддерживать. Во-вторых, «$» - не единственный символ мира в мире, а «,» - это не только тысячи игроков. То есть, код, как вы думаете, затрудняет проблемы глобализации.
[I] Есть ли другой способ обработки такого ввода?
Да. Используйте Decimal.Parse
с NumberStyles.Currency
:
string s = "$1,250.00";
decimal d = decimal.Parse(s, NumberStyles.Currency);
Это должно сделать трюк:
string money = "$1,250.00";
money = money.Replace('$',' ');
decimal test = Convert.ToDecimal(money);
Могу ли я спросить, почему вы заменяя пробелы стеклотары вместо обрезки их? –
Я перечислил URL-адрес сайта, на котором я снял код, я сам его не писал (зачем тратить пару минут на создание колес, когда 15 секунд Google получает ответ?). Пример, приведенный на сайте, относится к тому, когда кто-то разместил пробел после символа валюты –
Да. Вам нужно только добавить NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite вместо выполнения замены строки. Возможно, удаление пробелов в середине было бы неверным, поскольку оно потенциально подтвердило бы что-то неправильное. – tvanfosson