문제

Java를 사용하고 있으며 "Double"데이터 유형을 참조하고 있습니다. 짧게 유지하기 위해 코드에서 읽은 표준 입력에서 더블로 읽은 값을 읽고 있습니다 (BigInteger와 같은 것을 많이 사용하지만 지금은 불가능합니다).

나는 사용자로부터 이중 값을 얻을 것으로 예상되지만 때로는 99999999999999999999999.999999999와 같은 것을 입력 할 수도 있습니다.

특정 값이 두 배로 정확하게 표현 될 수 없는지 여부를 감지하는 방법에 대한 포인터를 얻고 싶습니다. 반올림이 필요합니다 (따라서 해당 값이나 다른 조치를 거부 할 수 있습니다).

매우 감사합니다

도움이 되었습니까?

해결책

인간이 입력 한 대부분의 값은 두 배로 정확하게 표현할 수 없습니다.

예를 들어, 사용자가 0.1에 들어가는 것을 방지 하시겠습니까? 그것은 정확히 두 배로 표현할 수 없습니다.

오류의 척도를 찾으려면 다음과 같은 작업을 수행 할 수 있습니다.

BigDecimal userAsDecimal = new BigDecimal(userInput);
double userAsDouble = double.parseDouble(userInput);
BigDecimal doubleToDecimal = new BigDecimal(userAsDouble);
BigDecimal error = userAsDecimal.subtract(userAsDouble).abs();

그런 다음 "오류"가 견딜 수 없을 정도로 작습니다.

다른 팁

double orig = GetSomeDouble();
double test1 = orig - 1;
if ( orig == test1 )
   SomethingIsWrong();
double test2 = test1 + 1;
if ( orig != test2 )
   SomethingIsWrong();

당신은 두 배를 사용할 수 없으며, 당신이 요구하는 방식에 정확하게 물건을 저장할 수는 없으며, 사용자는 더블이 완벽하게 표현할 수있는 숫자를 입력 할 수는 없지만 우연의 일치 일뿐입니다. 정확한 숫자를 저장 해야하는 경우 조작을 수행 할 필요가없는 한 문자열을 사용할 수 있습니다. 그 이상이 필요하다면 아마도 그런 종류의 정확한 수학을 위해 만들어진 라이브러리가있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top