2016-10-02 9 views
-1

Я бегу этот фрагмент кода:оценки математические операции

int x, y;
float val1, val2, val3;
x = 20;
y = 25;
val1 = x - 10;
val2 = y/val1;
val3 = float(val2);
val4 = float(y/(x-10));

Вышеуказанные выходы:

знач1 = 10
знач2 = 2.5
val3 = 2,5
val4 = 2

Может ли кто-нибудь объяснить мне, почему val3 и val4 оценивают по-другому? , когда на самом деле они оба делают одни и те же вычисления?

+0

Возможный дубликат [Почему я не могу вернуть двойной из двух разделов ints) (http://stackoverflow.com/questions/7571326/why-cant-i-return-a-double-from-two- ints-being-split) – user4407569

+0

«когда на самом деле они оба делают одни и те же вычисления» - неправильная предпосылка. – Olaf

+0

Спасибо @ Олаф, это полезно. –

ответ

0

Они оцениваются по-разному.

val3 = float(y/float(x - 10)) 
val4 = float(y/(x - 10) 

Для val3, типы являются float(int/float) и val4 является float(int/int), который будет отбрасывать результат y/(x - 10) к int первым, а затем привести его к float.

0

(y/x-10) имеет дело с целыми числами. Поплавок не применяется до тех пор, пока этот расчет не произведет 2.

y и x оба являются целыми числами. Итак, 20 (значение x) - 10 = 10. Тогда 25/10 (по-прежнему имеет дело с целыми числами - пока не плавает) = 2.

Смежные вопросы