Помогите Как округлить double ДО .5?

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

pro100koder

Активный участник
Пользователь
Баллы
76
Как округлить double именно до 0.5, 1.5 и т. д.? То есть, допустим, у нас есть число 3.8932, на выходе будет 4. Есть число 4,5678, на выходе будет 4,5. Нужно, чтобы не спамило в консоли, мол, нельзя ставить жизни моба там... 6.58987435456, нужно именно 6.5. При чём, самое интересное: жаловаться-то жалуется, спамит ошибками, а мобам жизни выставляет)
 
Если что, жалуется на строчку z.setHealth(health);
Код:
double health = z.getHealth();
            health = health+health*(wave/10.0);
            z.setHealth(health);
z - zombie.
 
Код:
double num = 1.56755;
num = Double.parseDouble(String.format(Locale.US, "%.1f", num));
> num = 1.6

P.S. Locale.US поставил, потому что некоторые форматы имеют на выходе запятую вместо точки, через это parseDouble выкинет ошибку.
 
Как округлить double именно до 0.5, 1.5 и т. д.? То есть, допустим, у нас есть число 3.8932, на выходе будет 4. Есть число 4,5678, на выходе будет 4,5. Нужно, чтобы не спамило в консоли, мол, нельзя ставить жизни моба там... 6.58987435456, нужно именно 6.5. При чём, самое интересное: жаловаться-то жалуется, спамит ошибками, а мобам жизни выставляет)
Второй вариант решения:
Код:
String formattedDouble = new DecimalFormat("#0.0").format(0.1321231);
 
Код:
double num = 1.56755;
num = Double.parseDouble(String.format(Locale.US, "%.1f", num));
> num = 1.6

P.S. Locale.US поставил, потому что некоторые форматы имеют на выходе запятую вместо точки, через это parseDouble выкинет ошибку.
Нужно именно на Пять округлять, либо я не понимаю, как работает setHealth(). За чем ошибку? Чтобы узнать, на какую строчку жалуется? Ладно, вот ошибочка...
Код:
Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0(28.0)
    at org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:101) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
    at tfshop.click.onSpawn(click.java:100) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_172]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_172]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
*Пока копался в логах, чтобы её найти, сам понял, что БОЖЕ! Число должно быть меньше 20? А ничего, что у зомби я выставил maxHealth 1000? (выставлял через команду... Может быть, решение - выставлять через плагин? Во время сета жизней, перед сетом самих жизней ставить maxHealth? Сейчас попробую, поможет - закрою тему.)
 
Нужно именно на Пять округлять, либо я не понимаю, как работает setHealth(). За чем ошибку? Чтобы узнать, на какую строчку жалуется? Ладно, вот ошибочка...
Код:
Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0(28.0)
    at org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:101) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
    at tfshop.click.onSpawn(click.java:100) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_172]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_172]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
*Пока копался в логах, чтобы её найти, сам понял, что БОЖЕ! Число должно быть меньше 20? А ничего, что у зомби я выставил maxHealth 1000? (выставлял через команду... Может быть, решение - выставлять через плагин? Во время сета жизней, перед сетом самих жизней ставить maxHealth? Сейчас попробую, поможет - закрою тему.)
Нет. Не помогло.
Код:
z.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(health);
            z.setHealth(health);
*Та же ошибка.
 
Нет. Не помогло.
Код:
z.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(health);
            z.setHealth(health);
*Та же ошибка.
Если что, нужно в настройках спигота в файле spigot.yml либо bukkit.yml выставить максимальное кол-во хп...
 
Код:
double num = 1.56755;
num = Double.parseDouble(String.format(Locale.US, "%.1f", num));
> num = 1.6

P.S. Locale.US поставил, потому что некоторые форматы имеют на выходе запятую вместо точки, через это parseDouble выкинет ошибку.
Второй вариант решения:
Код:
String formattedDouble = new DecimalFormat("#0.0").format(0.1321231);
Ну вы кнч сверхразумы через строку округлять...
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх