2011-08-25 8 views
20

tengo una doble (23,46)Math.ceil y Math.floor volviendo mismo valor

Y el uso de los métodos y Math.ceil Math.floor y analizar mi doble a estos métodos, consigo el mismo valor devuelto a yo, que es 23 ...

Quiero que se redondee a 24 .. En otras palabras, si tengo un doble que es 15.01, todavía debe redondearse a 16 ... ¿Cómo hago esto? ?

+5

Por favor, puesto reproducible código que muestra cómo ha llegado Math.ceil (23.46) = 23? – smci

+0

algo relacionado con esta pregunta, ceil y floor pueden imprimir el mismo valor si el doble pierde precisión, por ejemplo System.out.println ("ceil:" + Math.ceil ((1000000000000000000L - 1)/2.0)); System.out.println ("floor:" + Math.floor ((1000000000000000000L - 1)/2.0)); ambos obtendrán 5.0E17. – Deep

Respuesta

49

incapaces de reproducirse:

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 
    } 
} 

Sospecho que sea usted no ha conseguido los datos de entrada que piensa que tiene o usted no está escribiendo los datos de salida se cree que está. Math.floor/ceil funcionan bien. La única vez que devolverán el mismo valor es cuando la entrada ya es un número entero. Usted habla de analizando su doble ... supongo que el error está ahí. Por favor, muéstranos un programa breve pero completo que demuestre el problema.

(Puede haber otros escenarios en torno a valores muy grandes donde el entero objetivo exacto no se puede representar exactamente como double - No he comprobado - pero eso no es ciertamente el caso aquí.)

+5

"La única vez que devolverán el mismo valor es cuando la entrada ya es un número entero" Esto terminó siendo mi problema. Estúpido error de mi parte, gracias por tu ayuda. – Tiwaz89

3

Cuando corro

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

me sale

24.0 
16.0 

No es eso lo que quieres?

4
El código

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

me da el siguiente resultado:

24.0 
23.0 

por lo que funciona como se esperaba.

3

¿Cómo se hace la invocación real? No puedo replicar tu resultado, usando el objeto doble o el tipo primitivo.

este código:

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)); 

me da:

Ceiling simple: 24.0 
Floor simple: 23.0 
Ceiling object: 24.0 
Floor object: 23.0 
13
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 
Cuestiones relacionadas