Nano Hash - криптовалюты, майнинг, программирование

Double.TryParse со строкой с двумя десятичными точками

Это может быть простой и основной вопрос, но я подумал о подтверждении с вами. Im в процессе написания кода для проверки введенной текстовой информации является двойной или нет. В моем коде ниже находится строка для проверки значения скорости, взятого из текстового поля.

    double _mSpeed = 0.0;
    if (!Double.TryParse(txtboxSpeed.Text, out _mSpeed))
               throw new Exception("Input value for Speed is invalid !!!");

Но если пользователь указывает 4.4.4 в текстовом поле скорости, TryParse анализирует текстовую строку до значения 444.0. Мне интересно, это правильно или нет. Пожалуйста, поделитесь своими мыслями, если пользователь вводит какое-либо значение с двумя десятичными точками, не должно ли оно анализироваться на удвоение или каково ожидаемое поведение.

22.10.2013

  • Какую культуру вы используете? Какой у него разделитель тысяч? 22.10.2013
  • Это не для меня (en-US) 22.10.2013

Ответы:


1

В культурах, где . является десятичным разделителем, например en-US и инвариантной культуре, 4.4.4 недопустимо. В других культурах, таких как de-DE, , — это десятичный разделитель, а . — разделитель тысяч, поэтому 4.4.4 — это 444 (с нестандартными, но приемлемыми вставленными разделителями тысяч, например 4,4,4 в культуре en-US).

double.Parse("4.4.4", new CultureInfo("de-DE")) // 444
double.Parse("4.4.4", new CultureInfo("en-US")) // FormatException: Input string was not in a correct format.
double.Parse("4,4,4", new CultureInfo("en-US")) // 444
double.Parse("4,4,4", new CultureInfo("de-DE")) // FormatException: Input string was not in a correct format.
22.10.2013
  • большое спасибо за информацию. Теперь я мог решить проблему. :) 23.10.2013

  • 2

    Проблема может заключаться в том, что культура, используемая в настоящее время вашим приложением, рассматривает запятую как десятичный разделитель, а не точку. Вы можете заставить его использовать точку в качестве десятичного разделителя, установив для культуры значение en-GB.

    double _mSpeed = 0.0;
    if (!Double.TryParse(txtboxSpeed.Text,NumberStyles.Any,CultureInfo.CreateSpecificCulture("en-GB"), out _mSpeed))
               throw new Exception("Input value for Speed is invalid !!!");
    
    22.10.2013
  • большое спасибо за информацию. Теперь я мог решить проблему. :) 23.10.2013

  • 3

    Вместо того, чтобы создавать CultureInfo для определенного языка и региональных параметров, использующих ваш числовой формат (например, «en-US»), вы также можете просто указать NumberFormatInfo.InvariantInfo.

     double val1, val2;     
     bool b1 = double.TryParse("4.4.4", NumberStyles.Any, NumberFormatInfo.InvariantInfo, out val1);
     bool b2 = double.TryParse("4,444.4", NumberStyles.Any, NumberFormatInfo.InvariantInfo, out val2);
    

    В приведенном выше коде b1 устанавливается на false, но b2 завершается успешно, а val2 равно 4444.4.

    22.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..