#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 получает зеленый флажок, потому что он / она / оно ответил на мой первоначальный вопрос.