[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: чудеса математики
Guest09

var x=((0.05 + 0.05 * 1) * 100);
alert(x);

вроде всё просто.. 10

но когда 1 меняю на 2

var x=((0.05 + 0.05 * 2) * 100);
alert(x);



почему то получаю 15.000000000000002


..
((0.05 + 0.05 * 2) * 100)
=
((0.05 + 0.1) * 100)
=
((0.15) * 100)
=
0.15*100 = 15


при множителе 3 или 4, 20 всё нормально
... может кто сталкивался? как бороться (хотелось бы обойтись без округлений и тд)



Спустя 9 минут, 20 секунд (28.02.2012 - 09:04) sharki написал(а):
Guest09
Ты работаешь сначала с типом float, потом float умножаешь на int, правый операнд становится типа float (он прибавил нули или добавил в данном случае 2 в конец .000000000000002, ты не сможешь это проконтролировать, это на уровне интерпретатора).

Выход один, приравнивать все к одному типу, либо округлять(приводить к типу int) в конце например (int)...

Спустя 6 минут, 51 секунда (28.02.2012 - 09:11) Guest09 написал(а):
biggrin.gif пасиб
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.