2013-05-13 3 views
0

"나는 이미이 사실을 알고 있어야합니다"라는 질문을 용서해주세요.하지만 결과를 얻기 위해이 평가의 부서 측을 실행할 방법이 보이지 않습니다. 진실로 되돌아 오기. 나는 다음과 같은 작동 할 수 있도록, 특정 정밀도 부동 소수 (float)로 결과를 반환하는 함수를 찾고 있어요부동 소수점 숫자를 비교하는 방법

...

float a = 0.66; 

if(magicPrecisionFunction(2.0f/3.0f , 2) == a){ //the 2 specifies the level of precision 
    //something 
} 

나는 2 분 안에 자신이 쓸 수 있다는 걸 이 작업을 "올바르게"수행 할 수있는 Java 고유의 ​​방법을 찾고자했습니다.

+7

을 사용하는 것입니다, 당신은 부동 소수점 숫자에 대한 정확한 값을 가질하지 않습니다. 이 숫자를 처리하려면 'BigDecimal'을 대신 사용하십시오. 유감스럽게 생각하지만 예, 아마도 * 이미 알고 있어야합니다 *. –

+4

불합리한 숫자는 아닙니다. 부동 유형으로 표현할 수있는 모든 유한 수는 합리적입니다. – Paulpro

+0

AFAIK 결과를 반올림 할 수 있습니다. [java.math.BigDecimal'] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html) 문서를 볼 수 있다면 [BigDecimal # setScale'] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#setScale%28int,%20int%29) –

답변

2

나는 doublefloat 작성하는 간단하고 당신에게 반 조 회 정확성을 제공합니다 사용하지 않을 것입니다. @ 유사

int n = 2, d = 3; 
if ((long)(100.0 * n/d) == 66) { 
    ... 
} 

예를

ROFL입니다뿐만 아니라이 약 100 배 빠르게의 BigDecimal을 사용하는 것보다, 코드를 작성하는 짧은이다. BTW

을 BigDecimal로 이중 변환 할 수있는 적절한 방법을 두 번이나 플로트를 사용 valueOf

BigDecimal bd = BigDecimal.valueOf(0.1); 
System.out.println(bd); // prints 0.1 
1

당신이 MathContext와 함께

BigDecimal b1 = new BigDecimal("2.0"); 
    BigDecimal b2 = new BigDecimal("3.0"); 
    BigDecimal ans = b1.divide(b2, new MathContext(2)); // 2 is precision 
+0

흥미 롭습니다. 결과 객체를 가져 오기 위해 문자열을 전달합니까? –

+0

문자열을 전달할 필요가 없습니다.이 생성자는 많은 클래스를 가질 수 있습니다. – Dima

+0

@ Dr.Dredel'double' 또는'float'을 전달하면 'BigDecimal' 인스턴스가 잘못된 숫자로 작동하기 때문에 Dr.Dredel ie 0.1은 0.9999999 ... –

1

어떻게 접하게 정밀도를 필요한 수를 생성하고 설정할 수 있습니다 그것이 정확하게 당신이 필요로 을 할 것, BigDecimal 사용할 수 있습니다 ...

if (Math.round(100.0f * 2.0f/3.0f) == 66) { 
    .. 
} 

편집 : 아 ... 포인트를 놓친 ... 둥근 아니라 truncatte. 이 경우 : 당신이 정밀도를 원하는 경우

if ((int)(100.0f * 2.0f/3.0f) == 66) { 
    ... 
} 
+0

67 세가 돌아올 수 없다고 생각한 이유는 무엇입니까? –

+0

예, Math.floor가 작동하고, 다시 말했듯이, 나 자신이 이와 같은 것을 쓸 수는 있지만, 이것을 처리 할 Java 메커니즘이 내장되어 있다면 궁금합니다. –

+1

BigDicimald는 썰매 망치 답답하고 크고 느립니다 **. Yoy는 단단한 루프에서 충격을 느낄 것입니다 .... – rolfl

관련 문제