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)...
Ты работаешь сначала с типом float, потом float умножаешь на int, правый операнд становится типа float (он прибавил нули или добавил в данном случае 2 в конец .000000000000002, ты не сможешь это проконтролировать, это на уровне интерпретатора).
Выход один, приравнивать все к одному типу, либо округлять(приводить к типу int) в конце например (int)...
Спустя 6 минут, 51 секунда (28.02.2012 - 09:11) Guest09 написал(а):
