0



Кол-во потопленных кораблей увеличивается на 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 .

no1621name
  • 53
  • 9
  • Добавь ещё кода. Почему при прибавлении единицы увеличивается на 3? – Эникейщик Aug 19 '21 at 08:32
  • какое именно значение ты проверяешь и в какой момент времени??? – Grundy Aug 19 '21 at 08:36
  • и какое именно значение ты округляешь? – Grundy Aug 19 '21 at 08:41
  • 1
    this.sunkShips+1 / 3 - за такое форматирование руки поотрывать. – Qwertiy Aug 19 '21 at 08:58
  • @Qwertiy, стоило все-таки дождаться ответа. До сих пор непонятно, что именно он проверял и округлял – Grundy Aug 19 '21 at 09:02
  • @Grundy, зачем? Про 1.999... и так понятно. Как считать правильно - тоже понятно. Что он округлял? Ну 1.9 как ни старайся, до 0 не округлится - только до 1 или 2, значит округлял он там, где прибавляет 1/3 и 0 получался всегда: this.sunkShips = Math.ropund(this.sunkShips+1/3); Впрочем, как сюда ceil ни пристраивай, всё рано получится 1, 2, 3... – Qwertiy Aug 19 '21 at 09:17

1 Answers1

1

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

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

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

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

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

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

Qwertiy
  • 123,725