Ответ 1
i = 200 / 3
выполняет целочисленное деление.
Попробуйте либо:
i = (double)200 / 3
или
i = 200.0 / 3
или
i = 200d / 3
Объявление одной из констант как двойной приведет к использованию оператора двойного деления.
Когда я делаю деление на С#, оно автоматически округляется. См. Этот пример:
double i;
i = 200 / 3;
Messagebox.Show(i.ToString());
Это показывает мне сообщение с "66". 200/3 на самом деле 66.66666 ~.
Есть ли способ избежать этого округления и сохранить число, подобное 66.6666667?
i = 200 / 3
выполняет целочисленное деление.
Попробуйте либо:
i = (double)200 / 3
или
i = 200.0 / 3
или
i = 200d / 3
Объявление одной из констант как двойной приведет к использованию оператора двойного деления.
200/3 - целочисленное деление, в результате чего получается целое число.
попробуйте 200.0/3.0
Вы можете указать строку формата с нужным количеством десятичных кодов:
double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));
200 / 3
это целочисленное деление. Измените на: 200.0 / 3
, чтобы сделать это разделение с плавающей запятой.
Хотя ответ на самом деле - 66.666, происходит то, что вычисляется 200/3, в результате чего получается целое число. Затем целое число помещается в float. Сама математика происходит как целочисленная математика. Чтобы сделать его плавающим, используйте 200.0/3. 0..0 приведет к тому, что он будет обрабатывать 200 как float, что приведет к математике с плавающей запятой.
Помимо двойного vs int, происходящего в этом действии, вы думаете о двойном, как о точном модуле. Попробуйте использовать десятичный тип данных, когда вы действительно заботитесь о точности.
Дополнительная информация в этом ответе: decimal vs double! - Кого я должен использовать и когда?
double я = 200.0/3;
double я = ((double) 200)/3;
Что происходит, так это то, что два целых числа выполняют целочисленное деление, а затем целочисленный ответ присваивается float. Чтобы этого избежать, всегда делайте одно из чисел двойным.
Попробуйте это
i = 200d/3d;
и он не будет округлен.
200 и 3 являются целыми числами, поэтому результат будет целым числом. Преобразуйте одну из них в десятичную.
Все приведенные ответы неверны, потому что они переводят целочисленное деление на одно из двух двойных, что чисто не то, о чем просили (по крайней мере, с точки зрения производительности). Очевидным ответом является математика начальной школы, умножьте на 10, добавьте 5 и разделите снова все целые числа.
i = (2000/3 + 5)/10
Здесь вы поймаете второе подразделение, которое лучше, чем двойные преобразования, но все же далеки от совершенства. Вы можете пойти еще дальше и умножить на другой фактор и добавить другие значения, чем пять, что позволит вам использовать правое смещение вместо деления на 10. Точная формула для этого остается как упражнение для читателя. (Только google "разделов с Multiply Shift" )
Хороший день.