отображение десятичного числа в консоли c# с двойным - PullRequest
0 голосов
/ 18 апреля 2020

привет, вот мой код

    double d = 8.0;
    b = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine(d+b);

пример ввода / вывода

  1. вход 8 / выход 16

  2. вход 8,0 / выход 16

  3. вход 8,0 / выход 88

как я могу вывести 16,0 в случае 1 и 2? и 2-й вопрос, как я могу сказать c#, что 8.0 это 8 вместо 80?

я могу сделать

    double value=d+b;
    Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));

, но это не меняет того, что 8.0 интерпретируется как 80, это также не меняет отображение 16

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

1 Ответ

0 голосов
/ 18 апреля 2020

Вопрос 1

Вам необходимо:

  1. Заменить все запятые точкой, чтобы нормализовать десятичный разделитель к ".".
  2. Вам необходимо передать IFormatProvider на ваш звонок ToDouble, чтобы контролировать, как он анализирует номер. Передача CultureInfo.InvariantCulture достаточна, потому что она обрабатывает "." в качестве десятичного разделителя.

Вопрос 2

Как прокомментировал @jdweng, вам нужно использовать строку формата для управления выводом. Выражение $"{result:0.00}" - это то, что делает маги c здесь: это интерполированная строка , которая по существу берет все, что хранится в result, и применяет к ней строку формата 0:00, которая ограничивает вывод в два знака после запятой.

class Program
{
    static void Main(string[] args)
    {
        var d = 8.0D;
        var userInput = "8,0";
        userInput = userInput.Replace(',', '.');
        var b = Convert.ToDouble(userInput, CultureInfo.InvariantCulture);
        var result = d + b;
        var formattedOutput = $"{result:0.00}";
        Console.WriteLine(formattedOutput);
    }
}
...