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í.)
Por favor, puesto reproducible código que muestra cómo ha llegado Math.ceil (23.46) = 23? – smci
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