Как заставить пользователя ввести float в C#

Это изменение замечательно просто. (Почти так, как я это планировал, да?)

Ключевым методом, определяющим, является ли новое значение TextBox допустимым, является метод ValueIsValid. В предыдущих примерах этот метод возвращает true, если новое значение является допустимым целым числом или началом одного как в - или +. Новая версия этого метода возвращает true, если значение выглядит как float или начало одного из них.

В коде может использоваться float.TryParse, чтобы определить, является ли тестовое значение фактически плавающим, но это не всегда работает, если пользователь в процессе ввода нового значения. Например, предположим, что пользователь хочет ввести -9e-8. Это допустимый float, но в какой-то момент пользователь наберет -9e-, что не является допустимым значением.

В коде может использоваться float.TryParse, чтобы определить, является ли тестовое значение фактически плавающим, но это не всегда работает, если пользователь в процессе ввода нового значения. Например, предположим, что пользователь хочет ввести -9e-8. Это допустимый float, но в какой-то момент пользователь наберет -9e-, что не является допустимым значением.

...

К счастью, есть более простой метод. Если тестовая строка заканчивается не цифрой, просто добавьте цифру в конец и посмотрите, является ли результат действительным поплавком. Например, -9e- становится -9e-0, что является странным, но действительным. Аналогично - и + становятся -0 и +0, которые также странны, но действительны.

В следующей версии ValueIsValid используется этот подход.

// Возвращает true, если значение является действительным целым числом.
private bool ValueIsValid(string text_value)
{
    // Не допускаем пробелов.
    if (text_value.Contains(' ')) return false;

    // Разрешить пустое значение.
    if (text_value.Length == 0) return true;

    // Если текст не заканчивается цифрой, добавьте цифру
    // видеть, является ли он допустимым префиксом поплавка.
    if (!char.IsDigit(text_value, text_value.Length - 1))
        text_value += "0";

    // Смотрите, анализируется ли текст.
    float test_value;
    return float.TryParse(text_value, out test_value);
}

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

Далее, если значение не заканчивается цифрой, код добавляет 0. Затем метод использует float.TryParse, чтобы увидеть, является ли результат действительным поплавком.

Обратите внимание, что код по-прежнему допускает некоторые слегка запутывающие значения. Например, 1e100 не является допустимым поплавком, потому что он слишком велик (это действительный двойной), но 1e-100 действителен, потому что он по существу равен 0.0.

Предыдущие примеры позволяют пользователю вводить только целые числа, и этот пример позволяет пользователю вводить только поплавки. Вы можете легко изменить метод ValueIsValid, чтобы пользователь вводил другие типы данных, такие как байты, длинные, улунговые, двойные, десятичные и другие. С небольшой работой вы можете даже ограничить пользователя логическими значениями, такими как True, False, Yes и No.

Источник: http://csharphelper.com/blog/2017/08/make-the-user-enter-a-float-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector