2011-08-25 3 views
20

을 반환과 방법 Math.ceil 및 Math.floor를 사용하여 이러한 방법으로 내 배를 구문 분석, 나는 같은 값을 반환받을 나, 23입니다 ...이 Math.ceil 및 Math.floor 내가 <p>더블 (23.46)</p>이 같은 값

나는 24로 반올림하고 싶습니다. 다른 말로하면, 내가 15.01의 두 배가되면, 16으로 반올림되어야합니다 ... 어떻게해야합니까? ?

+5

당신이 Math.ceil (23.46) = 23을 가지고 방법을 보여 재현 코드를 게시하세요? – smci

+0

이 질문과 다소 관련이있는 경우 ceil과 floor는 double이 정밀도를 잃어버린 경우 같은 값을 출력 할 수 있습니다. 예를 들어 System.out.println ("ceil :"+ Math.ceil ((100000000000000000000L))/2.0)); System.out.println ("floor :"+ Math.floor ((1000000000000000000L-1)/2.0)); 모두 5.0E17을 제공합니다. – Deep

답변

49

없습니다

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로 표현할 수없는 매우 큰 값을 주변의 다른 시나리오가있을 수 있습니다 - 내가 확인하지 않은 -하지만 여기서 확실히 그렇지 않다.) 코드

+5

"동일한 값을 반환하는 유일한 시간은 입력이 이미 정수 인 경우입니다."이것은 결국 내 문제가되었습니다. 내 멍청한 실수, 도와 줘서 고마워. – Tiwaz89

3

내가

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

내가

24.0 
16.0 

가 당신이 원하는 아닌가요 얻을 실행하면? 재현

4

예상대로

24.0 
23.0 

그래서 작동 :

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

나에게 다음과 같은 출력을 제공합니다.

3

실제 호출은 어떻게합니까? 이중 객체 또는 기본 유형을 사용하여 결과를 복제 할 수 없습니다.

이 코드 :

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