2015-10-21 4 views
2

Я использую Double.TryParse(), чтобы узнать, является ли данная строка числом или нет. Я не знаю, как работает TryParse. Но когда я даю вход, как 54.34.23, он возвращает true. Я работаю над приложением MVC5 в Visual Studio Express 2013.Является ли 1.2.3 двойным типом данных

Так что это 54.34.23 действительно номер или я должен сделать что-то еще с TryParse, чтобы он возвращал false, когда указан приведенный выше ввод.

Немного подробнее 1.2.3.4 также возвращает true.

The result that is being displayed

if (!double.TryParse(setValue.Value, out val)) 
    { 
    ModelState.AddModelError("Value", "Value can only be a number"); 
    return View(setValue); 
    } 
+0

Что вы используете? Я только что протестировал и не разбирал для меня в C# (на который помечен вопрос.) –

+0

Я добавлю скриншот результата и моего кода. дайте мне минуту – Vini

+6

некоторые страны используют "." вместо «,» в качестве разделителя тысяч. попробуйте версию для конкретной культуры https://msdn.microsoft.com/en-us/library/3s27fasw(v=vs.110).aspx – Ewan

ответ

4

Если ваша культура потоков позволяет использовать «.», тыс. разделитель "54.34.23" будет анализироваться до 543423

[TestMethod] 
    public void TestMethod1() 
    { 
     string n = "54.34.23"; 
     double d1; 
     double d2; 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); 
     bool test = double.TryParse(n, out d1); 

     Console.WriteLine("test : " + test); 
     Console.WriteLine("d1 : " + d1); 
    } 

Однако !!! Я не уверен, что это твоя проблема. Я предлагаю вам написать ЕДИНИЦУ ТЕСТ для вашего кода! вы можете обнаружить, что что-то еще происходит

+0

Я постараюсь сделать это. благодаря – Vini

5

Рассматривали ли вы на самом деле тестирования TryParse(), чтобы увидеть, какой результат это дает вам быть уверенным. Я просто проверял здесь и следующий код в main() ...

double x; 
Console.WriteLine("Parse: {0}", double.TryParse("54.34.23", out x).ToString()); 
Console.WriteLine("Value: {0}", x); 

... который дает результат ...

Parse: False 
Result: 0 

Поскольку я получаю различный результат для вас, кажется, что мы имеем (как Ewan указаны в комментариях) вопрос локализации и исправить это, вы должны указать, какие правила вы хотели бы TryParse() использовать с помощью локализованного TryParse() метода (документированного в msdn.microsoft.com.)

Это занимает 4 параметры d позволяет указать, как работает парсер в отношении того, какие грани действительны (отрицательные числа, десятичные точки, показатели и т. д.)

+0

Да. Я пробовал значения в своей программе. – Vini

+0

Что такое разобранное значение, которое вы возвращаете? –

+2

вам нужна версия с строковой локализацией https://msdn.microsoft.com/en-us/library/3s27fasw(v=vs.110).aspx – Ewan

Смежные вопросы