Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Автоматическое округление до целого


Автор: Vitaly333 3.4.2008, 00:51

Вообщем поясню проблему на примере:
Есть три числа a,b,c.Число   "с" вычисляеться по  формуле: c = a/b;
Когда все три числа - все вещественного типа то всё нормально
 
Например:
Код

double a,b,c;
a = 1;
b = 4;
c = a/b;


c =  0.25

Но когда "a" и "b" целые, а "c"  вещественное, то  при вычислении последнего его вычисленное значение  автоматически становиться целым.

Например:  

Код

int a,b;
double c;
a = 1;
b = 4;
c = a/b;


c = 0.

Почему так происходит "c" же вещественного типа оно и должно получать вещественное значение , почему оно округляеться и как это испрвить без явного приведения типа.

Автор: Kangaroo 3.4.2008, 01:03
Это особенности оператора / для вещественных и целых чисел. Так что только даблами.

Автор: niasilil 3.4.2008, 02:59
чтобы ответить на вопрос "почему", надо копать в сторону того как процессор работает с целыми числами и как с числами с плавающей запятой. (в курсе Computer Archutecture )
Краткий ответ - "потому что так есть". smile

Автор: math64 3.4.2008, 08:51
Нужно писать так:
Код

int a,b;
double c;
a = 1;
b = 4;
c = (double)a/(double)b;

Автор: Platon 3.4.2008, 09:24
будем меряться писюльками?
Код

c = a*1./b;

Автор: AlexeyVorotnikov 3.4.2008, 09:37
В JLS сказано, что результат операции / для двух целых чисел является целым числом.

Автор: LSD 3.4.2008, 13:22
Цитата(Platon @ 3.4.2008,  10:24)
Код

c = a*1./b;

Этот код хуже:
1. явное приведение к double более очевидно
2. лишнее умножение

Автор: Platon 3.4.2008, 14:34
LSD, да, это очевидно, просто играюсь в topcoder, там чтоб быстрей набрать код, пишу так.

Автор: Kangaroo 3.4.2008, 14:39
Цитата(Platon @  3.4.2008,  14:34 Найти цитируемый пост)
LSD, да, это очевидно, просто играюсь в topcoder, там чтоб быстрей набрать код, пишу так. 

Там на скорость набора соревнования?  smile 

Автор: math64 3.4.2008, 15:12
Код

c=a; c/=b;

Автор: Platon 3.4.2008, 17:51
Kangaroo, 1-я задача как правило легкая, умные, быстрочитающие и просто шустрые, могут сдать задачку за минуту smile

math64, красиво и локанично smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)