Почему х 1 при назначении двойной? - PullRequest
0 голосов
/ 01 апреля 2020

Я очень новичок с C#.

Я не понимаю, почему х = 1, а не 1,4.

Может кто-нибудь объяснить мне это?

double x = (double)(12 / 5 - 3 % 2);

Console.WriteLine(x);

Ответы [ 5 ]

1 голос
/ 01 апреля 2020

Потому что это НЕ о двойном.

Вы выполняете целое число

(12/5 - 3% 2);

и ТОГДА приведение к удвоению. Если вы хотите, чтобы это было примерно вдвое, убедитесь, что хотя бы одно из чисел двойное. В вашем случае просто пометьте литералы как двойные.

(12d / 5d - 3d% 2d);

- все удваивается. Пока один является двойным, операция происходит как двойная - но ваш исходный случай выполняет все вычисления, ТО приводит к двойному. Так что они случаются как целое число.

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

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

Вы можете использовать двойное значение для первого значения, и этого должно быть достаточно:

> double x = (12d / 5) - (3 % 2);
> Console.WriteLine(x);
1.4
0 голосов
/ 01 апреля 2020

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

double x = (12d / 5d - 3d % 2d);
        Console.WriteLine(x);

Добавление d после числа сделает его двойным, а добавление f сделает его плавающим.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types#real -literals

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

Добро пожаловать в stackoverflow! :)

Проблема в том, что вы используете все int, а затем конвертируете их в double.

Вы должны убедиться, что вы работаете с double с самого начала.

Попробуйте код здесь: https://dotnetfiddle.net/xaQjKL

using System;

public class Program
{
    public static void Main()
    {
        // Doubles from the beggining
        double d_twelve = 12.0;
        double d_five = 5.0;

        double x = (double)(d_twelve / d_five);
        Console.WriteLine($"Using all doubles: {x}");

        // First split two int, then convert the result to double
        int i_twelve = 12;
        int i_five = 5;
        x = (double)(i_twelve / i_five); 
        Console.WriteLine($"Using ints, and converting at the end to double: {x}");


        // And now your code:
        x = (double)(12 / 5 - 3 % 2);
        Console.WriteLine($"Your original code: {x}");

        // And now your code fixed (notice the 12 => 12.0):
        x = (double)(12.0 / 5 - 3 % 2);
        Console.WriteLine($"Changing 12 by 12.0: {x}");
    }
}
0 голосов
/ 01 апреля 2020

Вы делаете целочисленную математику, а затем конвертируете в удвоение. 12/5 = 2, 3% 2 = 1 и 2 - 1 = 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...