Math.ceil и Math.floor возвращают одно и то же значение - PullRequest
21 голосов
/ 25 августа 2011

У меня есть double (23.46)

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

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

Ответы [ 5 ]

50 голосов
/ 25 августа 2011

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

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 - у меня нетпроверил - но это, конечно, не тот случай.)

14 голосов
/ 05 сентября 2013
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
4 голосов
/ 25 августа 2011

код

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

дает мне следующий вывод:

24.0
23.0

Так что все работает как положено.

3 голосов
/ 25 августа 2011

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

Этот код:

    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
3 голосов
/ 25 августа 2011

Когда я бегу

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

Я получаю

24.0
16.0

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...