Сообщение от рони
			 
		
	 | 
	
		не обязательно, можно и Math.round - но с Math.floor лучше. а почему вы в курсе?  
	 | 
	
Предполагаю что крайние цвета будут более редкие. + в вашем примере лишняя мат. операция
Math.floor - просто отрезает дробную часть оставляя целую, а Math.round округляет по правилам банка
Интересный ход с процентом от остатка делимое которого даже если и будет больше делителя на 1 все равно мы никак промахнемся. (да и как бы маскирует наш немножко кривой подход) 
Тут можно применить много математических операций, разделит 2 потом прибавить 2 потом все это округлить и тоже не вылезти за диапазон. Но все равно в зависимости от  от цвета который сейчас есть увеличивается вероятность выпадения цвета который мы получим применив к нему мат. операции которые мы используем. Вот это и есть единственный минус данной методики. 
