1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Лишние нули в double

Тема в разделе "Разработка плагинов для новичков", создана пользователем Novichock, 23 июл 2016.

  1. Автор темы
    Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Считаю объём выделенной территории так:
    Код:
                    int width,length,height;
                    width=(sel.getMaximumPoint().getBlockX()-sel.getMinimumPoint().getBlockX()+1);
                    length=(sel.getMaximumPoint().getBlockZ()-sel.getMinimumPoint().getBlockZ()+1);
                    height=(sel.getMaximumPoint().getBlockY()-sel.getMinimumPoint().getBlockY()+1);
                    int amount = width*length*height;
    //объём выделенной региона равен 343
    Вывожу подобным образом(в "" свой текст)
    Код:
    p.sendMessage(amount*0.2+"") //выводит 68.60000000000001;
    Могут быть ошибки из-за этих нулей(точнее из-за единички в конце)?
    Можно ли как-то не выводить числа дальше 68.60 ?
     
  2. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    В Google в первой же ссылке было решение ("java округлить double").
    Код:
    p.sendMessage(String.format(Locale.US, "%.2f", amount * 0.2));
     
  3. Автор темы
    Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    А на вычисления эти нули будут влиять?Что будет если в Essentials'e сниму игроку деньги,используя это значение?
     
  4. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Эти нули почти всегда есть, и пока никто от этого не умер. Если хотите высокую точность, то берите BigDecimal, но тут она вам не нужна.
     
  5. Автор темы
    Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Тогда будет 68,а мне нужно 68.60
     
  6. Derik

    Derik Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Derik
    (byte) берите а не (int).
     
  7. Rfg0

    Rfg0 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Rfg0
    Хм... а float забыли??? И вообще byte относится к типу "целые числа"!
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ваще не в тему.
     
  9. Rfg0

    Rfg0 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Rfg0
    Ах ну да... забыл указать что это адресовано Derek'у
    Ещё есть у тебя комментарии к сообщению?
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не, у меня нет других решений и двумя символами после точки.
     
  11. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Derik'y*
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Хотя Locale.US тас явно лишнее
    String.format("%.2f", amount*0.2);
     
  13. Rfg0

    Rfg0 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Rfg0
    Спасибо за поправки!

    бесит derik, путаю с dereku...
     
  14. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Вместо умножения на вещественное число 0.2 вполне себе можно целочисленно поделить на 5; может всё-таки забить на ошибку в пределах 0.0-0.8?
    И да, всё-таки лучше использовать long amount = l * w * h.
     
  15. Автор темы
    Novichock

    Novichock Активный участник Пользователь

    Баллы:
    76
    Про long спасибо,но вместо 0.2 будет переменная,которую можно будет указать в конфиге.
     
  16. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Если не добавлять Locale, то вместо точки будет запятая (68,60).
     

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