2009-08-20 5 views
9

String.format("%.2f", doubleValue);을 자르지 않고 반올림 (반올림 반올림 알고리즘)하지 않으려면 어떻게해야합니까?Java에서 String.format ("% .2f", doubleValue)의 반올림을 방지하십시오

포맷 후

doubleValue = 123.459 

,

doubleValue = 123.46 
난 그냥 마지막 숫자를 폐기 할

,

나는이 작업을 수행하는 다른 방법이 알고
123.45 

, 난 그냥이 있는지 알고 싶어요 String.format를 사용하여 가능합니다.

답변

12

당신은 항상 반올림 모드 설정할 수 있습니다

http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html

을 다음 HALF_EVEN이 기본적으로 사용됩니다 및 String.format()를 사용하지만 천장

으로 변경할 수 있습니다 또 다른 유연한 접근법은 없습니다 (그러나 이것은 사용자가 요구 한 것이 아닙니다) :

DecimalFormat df = new DecimalFormat("###.##"); 
df.format(123.459); 
+0

소수점 왼쪽의 자릿수가 3 자리 이상인 경우 어떻게해야합니까? 또한 새로운 객체를 만드는 대신 문자열로 변환 할 이중 변수에서 직접 사용할 수 있습니까? –

+1

향후 참조가 잘못되었습니다. 소수점 이하 자릿수가 6 인 경우 반올림 반올림이 사용되고 다른 반쪽 반올림 HALF_EVEN 반올림이 사용됩니다. 나는 이것이 터무니없는 것을 발견한다! – Chad

3
doubleValue = 123.459 
doubleValue = Math.ceil(doubleValue*100)/100; 
+3

, 그리고'ceil' ? – Rob

5

대답은 큰 뚱뚱한 것 같습니다. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec 이 나는 ​​그들이 NumberFormatter는가 수 있기 때문에이되는 RoundingMode를 설정하는 것을 할 것 이상한 찾을

"다음 값은 라운드의 절반까지 알고리즘을 사용하여 반올림됩니다." 그러나 당신이 말했듯이, 그것을 할 수있는 다른 방법이 있습니다. 분명히 가장 쉬운 방법은 먼저 가치에서 0.005를 뺍니다.

+1

이것은 허용 된 대답이어야합니다. @ DimitryK의 대답은 당신이 String.format() 대신 둥근 대신자를 수 있음을 암시합니다. 이는 사실이 아닙니다. – Aranda

-1

사용 및 String.format ("% 2F."있는 doubleValue - .005) 부정적인를위한 당신이 절단 할 경우, 플러스 (+) 값`floor`을 사용하지 않으

+4

이 방법에주의하십시오!. 'String.format ("% .2f", 1.05 - .005)'는 아마도 부동 소수점 부정확으로 인해'1.04'가됩니다. – Aranda

관련 문제