2014-07-06 3 views
0

나는 다른 클래스에 메소드를 만들었는데,이 클래스는 사용자가 투자 한 후에 돈을 계산합니다. 이 메소드가 과학 표기법이 아닌 표준 형식으로 값을 반환하도록하려고합니다. 이미 동일한 주제의 다른 답변을 찾는 시도하고 이것이 내가 내 주요 방법을 실행할 때 나는 아직도과학 표기법을 사용하지 않고 이중 문자를 반환하려면 어떻게해야합니까?

1.2902498E7 

이 값을 얻을, 나는

 DecimalFormat df = new DecimalFormat("#.##");  
     df.setMaximumFractionDigits(0); 
     endofyearamount = Double.valueOf(df.format(endofyearamount)); 
     return endofyearamount; 

그러나 지금까지 무엇을 가지고 있습니다 당신이 그것을 볼 필요가 경우 반환 값을 표시하는 내 주요 메서드의 코드입니다. 자바에 돈을 나타내는 경우

double answer = formula.calculate(age, retiredage, monthlyinvestment, interestrate, investedperyear, endofyearamount, x, y); 
     System.out.println(answer); 
+1

이 장난감 코드와 실제 질문은 복식을 포맷하는 방법입니까? 아니면 현실 세계에서 돈 값을 처리하기 위해 복식을 실제로 사용하려고합니까? 전자의 경우 출력을 format()해야합니다. 후자의 경우, 현금 값으로 부동 소수점 수학을 사용하지 마십시오. –

+0

[가능한 Java 응용 프로그램에서 돈을 위해 사용할 수있는 최상의 데이터 형식은 무엇입니까?] (http://stackoverflow.com/questions/8148684/what-is-the-best-data-type-to-use-for -money-in-java-app) – Raedwald

+1

http://stackoverflow.com/questions/16098046/how-to-print-double-value-without-scientific-notation-using-java의 가능한 복제본 – Raedwald

답변

1

나는 endofyearamountdouble이라고 가정합니다. 이는 문자열이 아닌 부동 소수점 숫자를 반환한다는 것을 의미합니다. 그것을 돌리기 전에 double을 아무리 두드리면, System.out.println(answer) 콜에 의해 행해진 포맷팅이 변경 될 것입니다. 대신

System.out.println(String.format("%.2f", answer)); 
1

마십시오 사용 double 아니라 BigDecimal를 사용하지 않습니다. Floating points cannot be used to represent precise real numbers accurately.

또 다른 SO 질문에 내 대답 comment을 참조하십시오.

+2

BigDecimal은 일반적으로 정확한 실수 또는 미적분에 특히 좋지 않습니다. 1을 3으로 나눌 것을 고려합니다. 이는 사실상 돈을 위해 유용한 유한 길이 소수 자릿수를 나타내는 데 매우 뛰어납니다. –

1

먼저 돈 정보를 저장하기 위해 부동 숫자에 의존해서는 안됩니다. 모든 상황에서 예상했던 것처럼 행동하지 않기 때문입니다.

둘째로, 과학적 표현은 값을 쓰는 방법 일뿐입니다. 값은 단지 값이기 때문에 값은 과학적 표현이 아니거나 과학적 표현이 될 수 없습니다. 내 말은 double을 비 특정 표현으로 변환 할 수있는 방법이 없지만 비 과학적 방법으로 그 값을 인쇄하는 것입니다.

double 값은 인쇄 방법에 관계없이 동일합니다. 몇 가지 십진수 값을 무시하고 그것을 출력 할 수 있습니다 (그리고 그에 상응하는 반올림을 얻습니다).하지만 당신은 단지 무엇을하고 있습니까? 문자열을 새로운 값을 가져 와서 새로운 오류를 가져 오는 문자열로 변환 하시겠습니까?

1

돈과 관련된 계산에는 double float을 사용하고 싶지 않습니다.

하나의 간단한 접근법은 달러가 아닌 단위로 센트를 사용하고 int (또는 큰 금액의 경우 long)에 금액 (센트)을 저장하는 것입니다.

public String centsToString(int cents) { 
    int dollars = cents/100; 
    cents = cents - (dollars * 100); 
    if (cents < 10) return "$" + dollars + "." + cents + "0"; 
    return "$" + dollars + "." + cents; 
} 

와 테스트 :

System.out.println(new TestAutoTagger().centsToString(13)); 
System.out.println(new TestAutoTagger().centsToString(99)); 
System.out.println(new TestAutoTagger().centsToString(100)); 
System.out.println(new TestAutoTagger().centsToString(101)); 
System.out.println(new TestAutoTagger().centsToString(999901)); 

가 생성 : 예로서

$ 0.13

$ 0.99

$ 1.00

$ 1.10

$ 999910

관련 문제