1. Java / Говнокод #13884

    +80

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    /**
       * Форматирует double, c arround кол-вом знаков после запятой
       * @param d double
       * @param arround int
       * @return String
       */
      public static String formatDouble(double d, int arround) {
        if (arround > 6) {
          throwIllegalFormat();
        }
        StringBuffer sb = new StringBuffer(10);
        boolean minus = d < 0;
        if (minus) {
          d = -d;
        }
        for (int i = 0; i < arround; i++) {
          d *= 10;
        }
        long l = (long) (d + 0.000000001);
        do {
          char digit = (char) ('0' + (l % 10));
          l = l / 10;
          sb.append(digit);
          if (--arround == 0) {
            sb.append('.');
          }
        } while (l != 0 || arround >= 0);
        if (minus) {
          sb.append('-');
        }
        return sb.reverse().toString();
      }

    Запостил: glprizes, 02 Октября 2013

    Комментарии (5) RSS

    • a че, в жабе нет готовых методов для форматирования, по-моему они там были).

      п.с. зачем изобретать свой велосипед.
      Ответить
    • Навскидку, могу предположить 2 варианта: Java ME (или ещё чего хуже), задание школьнику.
      Школьник бы не написал throwIllegalFormat(), это был бы перебор.
      Нет проверки на слишком большое double d и переполнение long, по-видимому, d это проценты. Но тогда -100% (слив депо) в буфер не влезут, однако. По-видимому, это уже будет неважно, клиент в состоянии аффекта разобьёт девайс о стену.
      Для полного драйва можно было бы не пользоваться приведением к long, а вытащить мантиссу из double.
      Ответить
    • старый добрый Math.floor()
      причем автор знает и StringBuffer, и StringBuffer.reverse()
      Ответить

    Добавить комментарий