2011-04-05 3 views
2

저는 현재 계산기 응용 프로그램을 작성 중입니다. 저는 이중이 좋은 수학을위한 최선의 선택이 아니라는 것을 압니다. 응용 프로그램의 대부분의 기능은 정밀도가 뛰어나지 만보기 흉한 결과를 얻지 못합니다. 내 솔루션은 사용자에게 12 자릿수의 정밀도 만 표시하는 것입니다. 저의 가장 낮은 정밀도는 수치 적 파생 함수로 인해 12를 선택했습니다.자바에서 특정 정밀도로 복식 표시

내가 겪고있는 문제는 스케일러에 의해 곱 해져서 스칼라로 나누면 정밀도가 튕겨 나오기 쉽다는 것입니다. DecimalFormat을 사용하는 경우 12 개만 표시하고 과학 표기법에 대한 E를 올바르게 표시 할 수는 없지만 필요하지 않으면 거기에 있지 않습니다.

예를 들어 나는

1.23456789111213 to be 1.234567891112 

하지만 결코

1.234567891112E0 

원하지만 나는 또한 12 소수점 자리까지 숫자의 문자열을 포맷 할 그래서 기본적으로

1.23456789111213E23 to be 1.234567891112E23 

을 원하는 과학적 표기법을 지키지 만 과학적 표기법을 지키지 않으면 과학적 표기법을 사용하지 않아야합니다.

+0

뭐하는거야? 짧은 절단은 어려운 작업으로 이어질 수 있습니다! 당신은 double이 올바른 선택이 아니라는 것을 알고 있습니다 만, 익숙하기 때문에 DoubleDecimal을 사용하는 법을 배워야 할 때 double의 문제를 극복하려고 시도하고 있습니다 (제안대로!) – Frankie

답변

3

당신이 과학적 표기법의 값을 표시하는 형식()를 사용하지만, 과학적 표기법없이 필요하지 않을 경우 어떻게 사용 String.format("%.12G", doubleVariable);

. 한 가지주의해야 할 점은 당신이 그렇게 당신이 1.234567891112E처럼 끝낼 것은 'E'후 '+'로 끝날 것입니다 + 23

+0

고맙습니다. 실제로 +를 좋아한다면, 저스틴 워 (Justin Waugh)로 나타나기를 원하지 않는다면, 응용 프로그램의 "thanks to"목록에 당신의 이름을 추가 할 것입니다. –

0
String.format("%.12d", doubleVariable); 

첫 번째 문제에서 원하는 것을 제공해야합니다. 죄송하지만 전자 알림이 표시되는 시점을 정의하는 방법을 모르겠습니다.

1

나는 BigDecimal 클래스를 찾고 있다고 생각한다. toEngineeringString() 메서드를 사용하여 과학 표기법을 얻을 수 있습니다. 또한 this answer을 참조하십시오. 생성자에서 MathContext를 지정하거나 setScale() 메소드 중 하나를 사용하여 스케일을 지정하여 BigDecimal의 정밀도를 설정할 수도 있습니다.

0

당신은 예를 들어, BigDecimal의에 관심이있을 수 있습니다 :

BigDecimal number = new BigDecimal("1.23456789111213"); 
number = number.setScale(12, RoundingMode.HALF_UP); 
System.out.println(number); 

RoundingMode를 적절하게 선택하십시오.

+0

이것이'1.23456789111213E23'과 어떻게 도움이됩니까? –

+0

BigDecimal에는이 표기법을 설명하는 toEngineeringString 메서드가 있지만이 솔루션에서는 과학 표기법을 표시할지 여부를 결정해야합니다 – smas