2012-02-14 5 views
2

Я новичок в программировании на C#, и я не уверен, что я делаю неправильно, потому что не могу суммировать числа, которые являются Double. Если я ввешу 2,5 и 2,5, я получаю 5, но если я вхожу в 2.5 и 2.5, я получаю ноль, когда вместо запятой я использую точку вместо запятой. Почему это?Суммировать значения Double ReadLine?

добавить некоторые из моего кода:

private void ReadInputAndSumNumbers() 
    { 
     while (!done) 
     { 
      Console.Write("Number: "); 
      if (double.TryParse(Console.ReadLine(), out num)) 
      { 
       if (num == 0) 
       { 
        done = true; 
       } 
       else 
       { 
        sum += num; 
       } 
      } 
     } 
    } 

Мои настройки будут использовать запятую, но я хотел бы, чтобы пользователь имел возможность ввести значение с точки также

+2

Вы можете показать свой входной код? –

+1

Формат принятого номера зависит от настроек вашей культуры –

+0

вы можете показать свой код на C#? –

ответ

4

Как вы преобразовывая ваш вход ReadLine в парный разряд? Большинство операций преобразования зависят от локали, поэтому, если ваши настройки Windows имеют , в качестве разделителя с десятичной запятой, этот параметр соблюдается.

Пример:

string enteredByUser = Console.ReadLine(); 

// uses user-specific Windows settings (decimal separator might be ",") 
double myDouble1 = double.Parse(enteredByUser); 

// uses default settings (decimal separator is always ".") 
double myDouble2 = double.Parse(enteredByUser, CultureInfo.InvariantCulture); 

Короткая заметка: Если вы синтаксический анализ входных данных пользователя, вы должны смотреть в double.TryParse, так как это является более надежной, чем double.Parse или Convert.ToDouble, так как он позволяет обнаруживать ошибочный ввод, не прибегая к обработке исключений.


EDIT: Если вы хотите поддержать как запятой и точку, вам нужно преобразовать точки в запятые (или наоборот) первыми. String.Replace может вам помочь. Обратите внимание, однако, что этот подход будет нарушен, если пользователь попытается ввести разделитель тысяч (1.000,00 ->1.000.00 или 1,000,00 -> ошибка). Рекомендуемый способ сделать это состоит в

  • принимает только десятичный разделитель, указанный в Windows, если входной сигнал поступает от конечного пользователя (т.е. сохранить ваш код, как он есть) и
  • принимает только нейтральный культура (.), если входной сигнал поступает от некоторого машинного выхода или файла.
+0

Привет, я пытаюсь использовать ваш код следующим образом: if (double.TryParse (Console.ReadLine(), CultureInfo.InvariantCulture, out num)), но он не работает ?! Что я делаю не так? –

+0

@ 3D-креатив: Что вы сделали неправильно? Вы не читали документацию double.TryParse перед ее использованием. ;-) Нажмите на ссылку за «double.TryParse» в моем ответе. – Heinzi

0

Образец для caculate двойная сумма

static void Main(string[] args) 
{ 
    var retVal = 0.0; 
    var sum = 0.0; 
    while (true) 
    { 
     Console.WriteLine("Enter input:"); 
     string line = Console.ReadLine(); 
     if (line == "exit") 
     { 
      break; 
     } 


     double.TryParse(line, NumberStyles.Any, CultureInfo.InvariantCulture, out retVal); 
     sum += retVal; 

     Console.WriteLine(string.Format("Double Value : {0}", sum)); 
    } 

    Console.ReadKey(); 
} 
Смежные вопросы