Подтвердить что ты не робот

Math.ceil и Math.floor возвращают одинаковое значение

У меня есть двойной (23.46)

И используя методы Math.ceil и Math.floor и разбору моего двойника к этим методам, я получаю то же самое значение, которое возвращается мне, что составляет 23...

Я хочу, чтобы его округлили до 24.. В других словах, если у меня есть двойной, чем 15.01, он должен быть округлен до 16... Как это сделать?

4b9b3361

Ответ 1

Невозможно воспроизвести:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(Math.ceil(23.46)); // Prints 24
        System.out.println(Math.floor(23.46)); // Prints 23
    }
}

Я подозреваю, что либо у вас нет входных данных, которые, по вашему мнению, у вас есть, либо вы не выписываете выходные данные, которые, как вы думаете. Math.floor/ceil сами работают нормально. Единственный раз, когда они возвратят одно и то же значение, будет когда значение уже целое. Вы говорите о разборе своего двойника... Я предполагаю, что ошибка там. Пожалуйста, покажите нам короткую, но полную программу, которая демонстрирует проблему.

(Могут быть другие сценарии вокруг очень больших значений, где точное целевое целое не может быть представлено точно как double - я не проверял - но это, конечно, не так).

Ответ 2

float x = ((float)2346/100);  // You should type cast. Otherwise results 23
Math.ceil(x);                 // So Math.ceil(23) is 23 !!!
                              // Here I type cast to float.
                              // So I get the result 24

Ответ 3

Код

System.out.println(Math.ceil(23.46));
System.out.println(Math.floor(23.46));

дает мне следующий результат:

24.0
23.0

Итак, он работает так, как ожидалось.

Ответ 4

Когда я запустил

System.out.println(Math.ceil(23.46));
System.out.println(Math.ceil(15.01));

Я получаю

24.0
16.0

Разве это не то, что вы хотите?

Ответ 5

Как вы делаете фактический вызов? Я не могу реплицировать ваш результат, используя либо двойной объект, либо примитивный тип.

Этот код:

    Double d_object = new Double(23.46);
    double d_simple = 23.46;

    System.out.println("Ceiling simple: " + Math.ceil(d_simple));
    System.out.println("Floor simple: " + Math.floor(d_simple));

    System.out.println("Ceiling object: " + Math.ceil(d_object));
    System.out.println("Floor object: " + Math.floor(d_object));

дает мне:

Ceiling simple: 24.0
Floor simple: 23.0
Ceiling object: 24.0
Floor object: 23.0