Форматирование textbox c# и использование неотформатированная стоимость

Я использую некоторый textboxes, чтобы показать общие количества, подуровни и скидки. Я преобразовываю десятичные числа, чтобы натянуть, чтобы представлять их в textbox. Кроме того, я хотел бы иметь " $ " вначале.

Я достиг этого при помощи этого:

tbx_total.Text = total.ToString("$ ##0.##");

Графически, это работает отлично, но моя большая проблема состоит в том, что мне нужно это стоимость textbox, чтобы вычислить другие. В основном я получаю ошибку форматирования во время времени выполнения, когда я пытаюсь преобразовать это textbox текст в десятичное число. Очевидно, это происходит из-за ToString (" $ ##0.## ") формат. Там какой-либо путь состоит в том, чтобы получить стоимость без формата?

0
nl ja de
Да, я знаю, но я создаю textboxes во времени выполнения. Я добавляю каждый созданный textbox в списке, и затем я использую список, когда я должен суммировать. Вот почему я не считал его выбором.
добавлено автор Andres, источник
Сохраните свою стоимость в вашем объекте, тогда представляют его стоимость, что вы хотите и где вы хотите.
добавлено автор Hamlet Hakobyan, источник

4 ответы

Одно простое решение будет:

tbx_total.Text = total.ToString("$ ##0.##");
tbx_total.Tag = total;

Тогда используйте tbx_total. Признак собственность для дальнейшего использования.

2
добавлено
I´ m разочарованный не бывший в состоянии, чтобы получить неотформатированный текст, не делая утомительной работы. Так или иначе я думаю, что ваше решение - то, которое подходит мне лучше. Спасибо за ваш ответ и время.
добавлено автор Andres, источник

Когда чтение его назад в вас может разобрать с NumberStyles, чтобы получить ваш желаемый эффект. Есть много битовых операций на NumberStyles, таким образом, я предлагаю исследовать, как использовать их для большей гибкости:

double.Parse(total, NumberStyles.Currency);

Также я склонен любить это за форматирование валюты немного больше, но чисто стилистический.

String.Format("{0:C}", total);

Примечание: Парсинг назад и вперед подвергается некоторым наверху так в зависимости от объема данных, может быть более мудро разгрузить стоимость к объекту и ссылке это, когда вам нужно десятичное значение снова.

1
добавлено

Как альтернатива, можно сделать это, каждый раз, когда вы читаете стоимость:

double value = 0;
if (!double.TryParse(tbx_total.Text.TrimStart(new char[] { '$', ' ' }), out value))
{
      //Ooops... not a valid number
}

Таким образом, здесь вы в основном удаляете добавленный '$' и пространство перед числом, позволяющим вам разобрать его как двойное. Таким образом, можно проверить, был ли номер введен правильно (при условии, что пользователь может отредактировать textbox.

1
добавлено

Я думаю, что необходимо сохранить исходные значения (десятичное число) в DataTable или некоторая другая коллекция и использовать эти ценности, чтобы вычислить то, в чем вы нуждаетесь.

Таким образом, можно отформатировать десятичные значения в любом формате, вам нравится без беспокойства о том, как преобразовать назад из последовательностей.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot