Лично я использую round / ceil / float в зависимости от того, что я ожидаю, а не от int

но я столкнулся с ошибкой / особенностью на нескольких языках. У меня есть базовые знания о том, как это вызвано (и я хотел бы получить подробное объяснение), но когда я думаю обо всех ошибках, которые я должен был сделать за эти годы, возникает вопрос: как я могу определить »Эй, это может вызвать нелепую ошибку, я бы лучше использовал функции произвольной точности", какие другие языки имеют эту ошибку (и те, кто не,Почему). Кроме того, почему 0,1 + 0,7 это делает, а 0,1 + 0,3 нет, есть ли другие хорошо известные примеры?

PHP

//the first one actually doesn't make any sense to me,
//why 7 after typecast if it's represented internally as 8?
debug_zval_dump((0.1+0.7)*10); //double(8) refcount(1)
debug_zval_dump((int)((0.1+0.7)*10)); //long(7) refcount(1)
debug_zval_dump((float)((0.1+0.7)*10)); //double(8) refcount(1)

Python:

>>> ((0.1+0.7)*10)
7.9999999999999991
>>> int((0.1+0.7)*10)
7

Javascript:

alert((0.1+0.7)*10); //7.999999999999999
alert(parseInt((0.7+0.1)*10)); //7

Рубин:

>> ((0.1+0.7)*10).to_i                                                  
=> 7                                                                    
>>((0.1+0.7)*10)                                                       
=> 7.999999999999999                                                    

Ответы на вопрос(3)

Ваш ответ на вопрос