Почему при округлении 1.999...8 получается 0? JS



Кол-во потопленных кораблей увеличивается на 1 после 3 попаданий по любому из не потопленных кораблей ( всего их три ).

Если потоплен 1 корабль, то все отображается корректно. Если 3, тоже. Но если сбиты только 2, то выводится 1.9999999999999998.

Пробовал использовать округление ( Math.ceil и Math.round) - не помогает, получается 0.

Очень прошу помочь.

isSunk(ship){
    for(var i = 0; i < this.widthShips; i++){
       if(ship.hits[i] !== 'hit'){
          return false;
       }
       return true;
    }
}


for(var i = 0; i < this.numShips; i++){
    var ship = this.ships[i];
    var index = ship.location.indexOf(guess);
      if(index >= 0){
        view.displayHit(guess);
        view.displayMassege('Hit!');
        ship.hits[index] = 'hit';
        if(this.isSunk(ship)){
            view.displayMassege('One battleship is sunk!');
            this.sunkShips = this.sunkShips+1 / 3;
        };
        return true;
     }
}

Проверяется кол-во потопленных кораблей после выстрела.

Я округляю значение sunkShips .


Ответы (1 шт):

Автор решения: Qwertiy

this.sunkShips = this.sunkShips+1 / 3;

Считай число попаданий целочисленным счётчиком, а при выводе используй Math.floor(n / 3) - тогда всё будет работать правильно.

Пробовал использовать округление ( Math.ceil и Math.round) - не помогает, получается 0.

Если бы пробовал не при добавлении 1/3, а при выводе, то round бы помог. Или вообще .toFixed(0). Но надо считать правильно, а не так.

Но если сбиты только 2, то выводится 1.9999999999999998.

Вычисления на числах с плавающей точкой не работают

→ Ссылка