Подтвердить что ты не робот

С# - округление делений само по себе

Когда я делаю деление на С#, оно автоматически округляется. См. Этот пример:

double i;
i = 200 / 3;
Messagebox.Show(i.ToString());

Это показывает мне сообщение с "66". 200/3 на самом деле 66.66666 ~.

Есть ли способ избежать этого округления и сохранить число, подобное 66.6666667?

4b9b3361

Ответ 1

i = 200 / 3 выполняет целочисленное деление.

Попробуйте либо:

i = (double)200 / 3

или

i = 200.0 / 3

или

i = 200d / 3

Объявление одной из констант как двойной приведет к использованию оператора двойного деления.

Ответ 2

200/3 - целочисленное деление, в результате чего получается целое число.

попробуйте 200.0/3.0

Ответ 3

Вы можете указать строку формата с нужным количеством десятичных кодов:

double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));

Ответ 4

200 / 3 это целочисленное деление. Измените на: 200.0 / 3, чтобы сделать это разделение с плавающей запятой.

Ответ 5

Хотя ответ на самом деле - 66.666, происходит то, что вычисляется 200/3, в результате чего получается целое число. Затем целое число помещается в float. Сама математика происходит как целочисленная математика. Чтобы сделать его плавающим, используйте 200.0/3. 0..0 приведет к тому, что он будет обрабатывать 200 как float, что приведет к математике с плавающей запятой.

Ответ 6

Помимо двойного vs int, происходящего в этом действии, вы думаете о двойном, как о точном модуле. Попробуйте использовать десятичный тип данных, когда вы действительно заботитесь о точности.

Дополнительная информация в этом ответе: decimal vs double! - Кого я должен использовать и когда?

Ответ 7

double я = 200.0/3;

double я = ((double) 200)/3;

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

Ответ 8

Попробуйте это

i = 200d/3d;

и он не будет округлен.

Ответ 9

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

Ответ 10

Все приведенные ответы неверны, потому что они переводят целочисленное деление на одно из двух двойных, что чисто не то, о чем просили (по крайней мере, с точки зрения производительности). Очевидным ответом является математика начальной школы, умножьте на 10, добавьте 5 и разделите снова все целые числа.

i = (2000/3 + 5)/10

Здесь вы поймаете второе подразделение, которое лучше, чем двойные преобразования, но все же далеки от совершенства. Вы можете пойти еще дальше и умножить на другой фактор и добавить другие значения, чем пять, что позволит вам использовать правое смещение вместо деления на 10. Точная формула для этого остается как упражнение для читателя. (Только google "разделов с Multiply Shift" )

Хороший день.