Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Цикл for

Статус
Закрыто для дальнейших ответов.

baksovic111

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
Baksovic
Прива всем)
Помогите пожалуйста решить 1 проблему.
У меня есть цикл в коде для поиска определенного pex с числом double

for (float value = 0.0F; value <= 10.0F; value = (float)(value + 0.1D)) {
if ((player.hasPermission("multiplier." + value))
{my code...}}

Проблема в том что цикл прибавляет к value не всегда целые значения.
Я выводил переменную value и в консоли я получал примерно следующее..
0.1
0.2
0.3
0.4
0.5
0.6
0.6999999998
0.7999999999
0.800000001

Что то в роде этого. Подскажите пожалуйста как это решить..
У меня не достаточно опыта чтобы решить эту проблему с к сожалению(
 
А так не будет работать?
Java:
value = value + 0.1F
Пробовал... Еще раз попробую.. Выдает значения еще по хлеще...

[22:47:15] [Server thread/INFO]: 0.10000000149011612
[22:47:15] [Server thread/INFO]: 0.20000000298023224
[22:47:15] [Server thread/INFO]: 0.30000000447034836
[22:47:15] [Server thread/INFO]: 0.4000000059604645
[22:47:15] [Server thread/INFO]: 0.5000000074505806
[22:47:15] [Server thread/INFO]: 0.6000000089406967
[22:47:15] [Server thread/INFO]: 0.7000000104308128
[22:47:15] [Server thread/INFO]: 0.800000011920929
[22:47:15] [Server thread/INFO]: 0.9000000134110451
 
Пробовал... Еще раз попробую.. Выдает значения еще по хлеще...

[22:47:15] [Server thread/INFO]: 0.10000000149011612
[22:47:15] [Server thread/INFO]: 0.20000000298023224
[22:47:15] [Server thread/INFO]: 0.30000000447034836
[22:47:15] [Server thread/INFO]: 0.4000000059604645
[22:47:15] [Server thread/INFO]: 0.5000000074505806
[22:47:15] [Server thread/INFO]: 0.6000000089406967
[22:47:15] [Server thread/INFO]: 0.7000000104308128
[22:47:15] [Server thread/INFO]: 0.800000011920929
[22:47:15] [Server thread/INFO]: 0.9000000134110451
почитай про арифметику с плавающей запятой.
 
Прикольно. Ну тогда, может, так?
Java:
for (double value = 0; value <= 10; value = value + 0.1D))
 
Ява очень против того чтобы я сделал то что хочу...

[22:53:42] [Server thread/INFO]: 0.0
[22:53:42] [Server thread/INFO]: 0.1
[22:53:42] [Server thread/INFO]: 0.2
[22:53:42] [Server thread/INFO]: 0.30000000000000004
[22:53:42] [Server thread/INFO]: 0.4
[22:53:42] [Server thread/INFO]: 0.5
[22:53:42] [Server thread/INFO]: 0.6
[22:53:42] [Server thread/INFO]: 0.7
[22:53:42] [Server thread/INFO]: 0.8999999999999999
[22:53:42] [Server thread/INFO]: 0.9999999999999999
[22:53:42] [Server thread/INFO]: 1.0999999999999999
 
Ход конем:
Java:
for (int value = 0; value <= 10; value++)) {
if ((player.hasPermission("multiplier." + value/10))
{my code...}}
 
а не проще все сделать в int?
Java:
for (int value = 0; value <= 10; value++) {
if ((player.hasPermission("multiplier." + value))
{my code...}}
 
А потому что работать с числами с плавающей запятой - гиблое дело.
 
Мне кажется, что тут пахнет каким-то костылем, но можно получать список имеющихся у игрока multiplier'ов и производить действия уже с ними

de162d5181.png
 
Такой поиск занимает драгоценное время. Permissions годны в общем только для boolean значений (можно или нельзя). Для других, вроде лимитов - лучше определять какой группе принадлежит игрок и в зависимости от этого устанавливать для него лимиты.
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх