.Net: Преобразование значения в формате валюты в десятичное значение с помощью String.Replace - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть значение, которое отформатировано в формате валюты и отображается в текстовом поле.Мне нужно выбрать его и преобразовать в десятичную.например, у меня есть $1,633.75 в виде строки и я хочу привести ее в десятичном виде, чтобы сохранить ее в БД.На них уже есть вопросы и некоторые ответы, но все они предлагают более сложные UDF и т. Д. Для решения проблемы.

Вопрос в том, почему мы не можем использовать метод замены в строке для удаления запятых (",") и "$" и просто использовать decimal.Parse?

Скажите, что tbAmountPaid $1,633.75

Что является недостатком только что сделанного:

decimal.Parse(tbAmountPaid.Text.Replace(",","").Replace("$",""))

, чтобы получить десятичное значение типа 1633.75?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

ОК, значит, вы не спрашиваете, как это сделать, вы спрашиваете «почему бы не сделать это таким образом?» ...

  1. Ваша альтернатива требуетбольше усилий для ввода, чем для правильного решения,
  2. больше усилий для обработки компьютера,
  3. больше использования памяти (поскольку строки неизменяемы),
  4. компилируется в больший IL,
  5. Ваш подход зависит от культуры.Некоторые культуры используют точку для разделителя тысяч и запятую для десятичного знака, не говоря уже о другом символе валюты.

Если перевернуть вопрос, что, по вашему мнению, лучше относительно вашегоподходит?

0 голосов
/ 18 сентября 2018

Недостатком является то жесткое кодирование.Вы никогда не знаете культуру и формат, в котором написана строка.В самой строке может быть несколько ошибок.Если вы выполняете жесткое кодирование, в вашем коде может возникнуть ошибка

Я рекомендую вам использовать поставщика форматов.Я взял код отсюда https://docs.microsoft.com/en-us/dotnet/api/system.decimal.parse?redirectedfrom=MSDN&view=netframework-4.7.2#System_Decimal_Parse_System_String_System_Globalization_NumberStyles_System_IFormatProvider_

string value;
decimal number;
NumberStyles style;
CultureInfo provider;

value = "$1,633.75";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
provider = new CultureInfo("en-US");
number = Decimal.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);
...