2013-06-12 2 views
20

내 프로젝트에서 이중 값을 사용하고 처음 두 자리를 항상 0으로 표시하고 싶습니다. 반올림을 위해이 함수를 사용하고 만약 내가 인쇄 한 값이 3.47233322이면 (정확하게) 3.47을 출력합니다. 하지만 인쇄 할 때, 예를 들어, 값 2는 2.0을 인쇄합니다.Java : double : 항상 두 자리 숫자를 표시하는 방법

public static double round(double d) { 
    BigDecimal bd = new BigDecimal(d); 
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
    return bd.doubleValue(); 
} 

2.00을 인쇄하고 싶습니다!

문자열을 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

감사합니다.

EDIT : 답변 해 주셔서 감사합니다. 내가 검색 한 내용을 분명히 알지 못한다는 것을 이해합니다. (그리고이 문제로 인해 유감입니다.) 번호 뒤에 두 자리를 인쇄하는 방법을 알고 있습니다. 당신이 제안한 솔루션을 사용하여 ... 내가 원하는 것은 직접 두 자리 값을 두 배로 저장하는 것입니다! 그래서 내가 System.out.println("" + d)과 같은 것을했을 때 (여기서 d는 값이 2 인 나의 double 임) 2.00을 출력합니다.

나는 이것을 할 방법이 없다고 생각하기 시작했습니다 ... 맞습니까? 어쨌든 귀하의 답변을 주셔서 다시 한번 감사드립니다. 솔루션을 알고 있다면 알려주십시오!

+3

. 제시 될 때 서식이 지정된 방식 만 수정할 수 있습니다. –

+0

예 ... 당신이 옳다고 생각합니다. 나는 사용자에게 보여줄 때마다 내 값을 형식화해야합니다 ... 많은 시간을! 답변 주셔서 감사합니다! – aveschini

+0

글쎄, 포맷터 메소드를 한 번만 작성하면됩니다. 걱정하지 않아도됩니다. ;) –

답변

41

당신은 같은 것을 사용할 수 있습니다 : 나는 진짜 대답이 필요하고이 구글에 와서 때문에 실제로 질문에 대답

double d = 1.234567; 
DecimalFormat df = new DecimalFormat("#.00"); 
System.out.print(df.format(d)); 

편집을하고 누군가 십진수가 0 일 때 작동하지 않는다는 사실에도 불구하고 답으로 표시했습니다.

+0

나는 내가 무엇을 찾고 있는지 명확히하기 위해 나의 질문을 편집했다. 어쨌든 고마워! – aveschini

+1

주어진 숫자가 '0.3'이라면 인용 부호의 코드가 '.30'인 것을 알았 기 때문에 대신 패턴 # 0.00을 사용하여 지금까지 잘 작동했습니다. –

+0

저에게이 답변은 실제로 작동하지 않습니다. 여기에 제가 얻은 것이 있습니다 :'13310.0 13676.31 26600.2' – wintermute

17

사용이에 대한 java.text.NumberFormat :

NumberFormat nf= NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(2); 
nf.setMinimumFractionDigits(2); 
nf.setRoundingMode(RoundingMode.HALF_UP); 

System.out.print(nf.format(decimalNumber)); 
+0

나는 내가 무엇을 찾고 있는지 명확히하기 위해 나의 질문을 편집했다. 어쨌든 고마워! – aveschini

+0

답변을 추가했습니다. – darijan

+0

xxx.00을 얻기위한 노력 – Dexter

3

DecimalFormat이 가장 쉬운 옵션입니다. 사용 :

double roundTwoDecimals(double d) { 
     DecimalFormat twoDecimals = new DecimalFormat("#.##"); 
     return Double.valueOf(twoDecimals.format(d)); 
} 

희망이 당신의 문제를 해결하는 것은 ...

+0

지금 당신의 해결책을 시도했지만 ... 작동하지 않습니다. 나는 3을 넣고 3.0을 인쇄한다. – aveschini

+0

실례합니다. 나는 너무 빠르며 항상 읽지 않았다. DecimalFormat을 "##. 00"으로 변경해보십시오. 이렇게하면 문제가 해결됩니다. –

7

당신은 단순히이 작업을 수행 할 수 있습니다

double d = yourDoubleValue; 
String formattedData = String.format("%.02f", d); 
+0

이것은 어떤 식 으로든 숫자를 반올림하지 않으려는 분을위한 답변입니다. – Siavas

+0

라운드 후 double 자체에 값을 저장하려고합니다. –

0
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##"); 
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 
+0

코드에 대한 설명이 약간 좋을 것입니다. – Sakuto

0
당신이 같은 것을 사용할 수 있습니다

:

대답을 0으로 유지하려면 다음 형식 문자열 (0.00)를 사용

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

출력 : 2.46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

출력 : 0.00

그러나 "(DecimalFormat의 DF = 새에 DecimalFormat을 사용하는 경우 0. ## ");

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

출력 : 2.46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

출력 : 난 당신이 방법 자바 저장을 두 번 값을 변경할 수 있다고 생각하지 않습니다 0

관련 문제