(int)(int1 / (float)var2.Count() * 100)
эквивалентный
(int)((int1 / (float)var2.Count()) * 100)
... и это будет использовать деление с плавающей точкой или целочисленное деление?
Править... если ответ - да к вышеупомянутому, что преимуществом выполнения является деление с плавающей точкой здесь?
/
и *
имеют одинаковый приоритет операторов, согласно §7.2.1, поэтому два результата должны быть одинаковыми (используя правила float
).
Я, однако, не могу утруждать себя изучением таблиц старшинства; я просто использую скобки. Тогда они работают в любом языке без необходимости запоминать их.
Еще один важный вопрос - округление в финальном (int)
броске: вы ожидаете, что это будет "up", "down" или "bankers"?
Они эквивалентны и будут использовать деление с плавающей запятой. Даже если умножение произошло первым, будет использоваться деление с плавающей запятой, поскольку int делится на результат float * int, который является float.
Редактировать:
Если ответ положительный на вышеизложенное, в чем преимущество выполнения здесь деления с плавающей запятой?
Является ли это преимуществом? Первое, что вам следует подумать, - правильно ли это, поскольку результат будет другим. Судя по коду, кажется, вы пытаетесь посчитать какой-то процент. При использовании целочисленного деления, если «int1» всегда меньше, чем var2.Count (), результатом всегда будет 0, что может быть не тем, что вы хотите.
Целочисленное деление вернет только целую часть ответа, т.е. 3/2 будет 1, тогда как деление с плавающей точкой даст вам 1.5
да, оба эквивалентны.
Оба будут использовать деление с плавающей запятой.
Я бы сказал, что да, деление и умножение должны идти слева направо. Таким образом, это деление с плавающей точкой.
PS: замените float
на double
везде, где только можно.
Это одно и то же. Оба будут использовать плавающее деление.
Правила приоритета очень неприятно запоминать, поэтому я тоже предпочитаю использовать скобки для устранения неоднозначности. Я стараюсь следовать совету «сначала писать код для людей, а потом - для компьютеров». Но есть интересная мнемоника (которую я узнал из книг Брюса Эккеля) для запоминания (некоторых) правил: « Язвенные наркоманы действительно любят CA lot »:
Ulcer - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really - Relational (<, >, ==, <=, >=, !=)
Like - Logical (and bitwise) (&&, ||, &, |, ^)
C - Conditional ( ? : ) <- this is the conditional ternary operator
A lot - Assignment ( =, *=, +=, ...)
Это не идеально, побитовые операторы сжаты in, и мы должны знать, что операторы умножения (*, /,%) имеют приоритет над операциями сложения (+, -).