Определение десятичной дроби в текстовом поле

#c# #visual-studio #visual-studio-2010 #windows-phone-7 #decimal

#c# #visual-studio #visual-studio-2010 #windows-phone-7 #десятичная

Вопрос:

Я разрабатываю что-то вроде калькулятора для Windows Phone.

Ему не нужно использовать десятичные дроби. (кому нужно 0,39 кирпича)

Как бы я определил, что в строке или текстовом поле есть десятичная дробь?

РЕДАКТИРОВАТЬ: Спасибо, @Balar и @Afnan. Но то, что мне было нужно, было чем-то, что также отфильтровывало буквы. Мой ответ ниже.

Комментарии:

1. здесь есть руководство по текстовому полю «только числа»: atleyhunter.com/2010/11/12 /…

2. Очевидно, кирпичный слой. Выведите его из строя с помощью int. Попробуйте использовать Parse() вместо decimal. Попробуйте Parse().

3. @BrokenGlass: Спасибо за ссылку. @Ханс Пассант: Да, я уже использовал int. Попробуйте проанализировать (элемент 1, из элемента 2);

Ответ №1:

Изменение Bala R кода дает

 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text.Contains(".") || textBox1.Text.Contains(","))
                textBox1.Text = textBox1.Text.Replace(".", string.Empty).Replace(",", string.Empty);
        }
  

это удалит недопустимые символы, которые вводятся при записи входных данных

Комментарии:

1. Вау, это, безусловно, лучший ответ, который я когда-либо получал на StackOverflow. Сработало немедленно. (помимо незначительного изменения xaml)

Ответ №2:

Я думаю, что вам нужно проверить, является ли значение допустимым десятичным значением.

Используйте метод TryParse:

 decimal value;

string textValue = textBox.Text;
bool isDecimal = decimal.TryParse(textValue, out value)
  

Комментарии:

1. Обратите внимание, что decimal.TryParse будет успешно анализировать целые числа (поскольку они также являются допустимыми десятичными числами). Я думаю, что OP хочет разрешить целочисленные значения, но не (нецелые) десятичные дроби.

2. @ LukeH: Я думаю, что он может сначала проверить integer.TryParse .

Ответ №3:

Вы можете использовать это, чтобы увидеть, есть ли «точка» в строке

  bool hasDecimal = textBox.Text.Contains(".") 
  

но более одной точки было бы плохо для десятичного значения.

Комментарии:

1. Обратите внимание, что в разных культурах могут использоваться разные десятичные символы

2. Как сказал Люк, разные культуры используют разные символы, вы можете найти соответствующий символ в CultureInfo.CurrentCulture.NumberFormat . CurrencyDecimalSeparator

3. @Найджел: Спасибо, я бы никогда не догадался об этом сам. @Bala: Да, я бы ожидал, что некоторые пользователи случайно нажмут более одной десятичной дроби.

Ответ №4:

Вот что, как я обнаружил, работает лучше всего:

bool bNeedToUpdate = false;


StringBuilder szNumbersOnly = new StringBuilder();


TextBox textSource = sender as TextBox;


if (null == textSource)


return;


foreach (char ch in textSource.Text)


{


if (("0123456789").Contains(ch.ToString()))


{


szNumbersOnly.Append(ch);


}


else


{


bNeedToUpdate = true;


}


}


if (bNeedToUpdate)


{


textSource.Text = szNumbersOnly.ToString();


textSource.SelectionStart = szNumbersOnly.Length;


}

Я стащил этот ответ у Эрин Флек, модератора форумов, которая ответила на этот аналогичный вопрос.

@Afnan получает зеленый флажок, потому что он / она / оно ответил на мой первоначальный вопрос.