Округлите только десятичные дроби до ближайших десятков в Java, например от 1,17 до 1,20

Как можно округлить заданное число, например 1,17 до 1,20, а не 1,0 или 2,0. Я пытался напечатать список сантиметров, футов и дюймов от 4 до 7 футов. У меня есть сантиметры и футы, но часть дюймов не такая, как задумано.

Вот функция, которую я использую для создания списка и регистрации результатов.

private void print() {
        final float oneInch = 2.54f;
        final float oneFt = 30.48f;
        final float end = oneInch * 12 * 7;
        float start = oneInch * 12 * 4;
        int cm;
        int ft;
        float in;
        StringBuilder sb = new StringBuilder();
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
        while (start <= end) {
            if (sb.length() > 0) {
                sb.replace(0, sb.length(), "");
            }

            cm = (int) start;
            sb.append(cm);
            sb.append(" cm, ");

            ft = (int) (start / oneFt);
            in = Float.valueOf(decimalFormat.format(start / oneFt - ft));
            if (in >= 1.0f) {
                ++ft;
                in = 0f;
            }
            sb.append(ft);
            sb.append(" ft ");
            if (in > 0) {
                sb.append(String.valueOf(in).replace("0.", ""));
            }
            start += oneInch;
            Log.i("measure", sb.toString());
        }
    }

Вот зарегистрированные значения

121 cm, 4 ft
124 cm, 4 ft 08
127 cm, 4 ft 17
129 cm, 4 ft 25

он печатается как 4 фута 08, как я могу напечатать часть в дюймах целыми числами, как это?

121 cm, 4 ft
124 cm, 4 ft 1
127 cm, 4 ft 2
129 cm, 4 ft 3

Похоже, вы уже нашли, как округлить 1,17 до 1,2? Возможно, вам придется использовать "#.#" вместо "#.##"

phflack 16.03.2018 16:47

Что касается второй части вашего вопроса, похоже, что ваши дюймы отклонены в 10 раз? У вас должно получиться разделить на 10,0 и округлить

phflack 16.03.2018 16:48

Чтобы округлить первую десятичную дробь числа, вы можете просто использовать: Math.round(num % 1 * 10). Например, для 4.18 это приведет к 2. Вы можете использовать Math.round(num % 1 * 10) / 10.d, если хотите, чтобы это был 0.2, и (int) num + (Math.round(num % 1 * 10) / 10.d) для 4.2.

Ben 16.03.2018 16:50

@phflack Я уже пробовал это, но он повторяет некоторые значения, например 4 фута 3 дважды для 129 и 132

Sony 16.03.2018 16:54

@Ben Проще использовать Math.round(num * 10.0) / 10.0 для 4.2

phflack 16.03.2018 16:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте строки для числовых операций. При выполнении математики используйте математические операторы и математические функции:

in = (start / oneFt - ft) * 12;

Вам совсем не нужно округлять числа. Пусть DecimalFormat сделает округление:

if (in > 0) {
    sb.append(decimalFormat.format(in));
}

Эта строковая функция используется для удаления ведущего 0. из переменной in.

Sony 16.03.2018 16:56

Ваша переменная in содержала дробное количество футов. 0,5 фута - это 0,5 × 12 = 6 дюймов.

VGR 16.03.2018 17:00

Другие вопросы по теме