2009-12-11 4 views
5

내 대답을 반올림해야합니다.10 진수를 가장 가까운 10 번째 자리로

double finalPrice = everyMile + 2.8; 
    DecimalFormat fmt = new DecimalFormat("0.00"); 
    this.answerField.setText("£" + fmt.format(finalPrice) + " Approx"); 

위의 코드는 정수를 가장 가까운 10 번째로 반올림하지만 10 진수는 반올림하지 않습니다. 예컨대 2.44 대신 2.40

+2

회지지 존 소총의 마지막 발언은,주의하시기 바랍니다 ** 어떤 ** 수 X.1, X 10 진수로 작성.하지 2, x.3, x.4, x.6, x.7, x.8 또는 x.9는 정확히 부동 소수점 숫자로 표시됩니다. –

+0

나는 당신이 말한 것을 이해하지 못합니다. –

+3

중요한 것은 그것을 이해할 시간이 필요합니다. –

답변

9

변경 조금 하드 코딩 최종 제로 패턴 : 당신이 실제 돈을 조작하는 경우 이제

double finalPrice = 2.46; 
DecimalFormat fmt = new DecimalFormat("0.0'0'"); 
System.out.println("£" + fmt.format(finalPrice) + " Approx"); 

는, 당신은 두 번 사용하지만, int 형 또는 BigInteger를하지 않는 것이 좋습니다 것입니다.

+0

MAGICAL. lol 근무했습니다. 그래서 '0'이라고 말하면 육체적으로 0을 마지막 숫자로 찌르다는 뜻인가요? –

+0

네, 그 뜻입니다. – Jerome

+0

달콤한, 도와 줘서 고마워. 난 다른 포럼에 같은 일을 게시 4시간 후 그들은 빈정 구글 나를 reffered. (내가 전에 시도하는) 너희들을 슈퍼 빠른 롤이 –

10

사용 BigDecimal로 반올림한다.

당신은 정말, 정말 금전적 가치에 대한 이진 부동 포인트를 사용하지 않습니다.

편집 : round() 당신이 소수 자릿수 만 유효 숫자를 지정할 수 없습니다. 여기에 다소 서투른 기술은, 그러나 그것은 (기본적으로, 당신이 절단 할 가정) 작동 :

import java.math.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     BigDecimal bd = new BigDecimal("20.44"); 
     bd = bd.movePointRight(1); 
     BigInteger floor = bd.toBigInteger(); 
     bd = new BigDecimal(floor).movePointLeft(1); 
     System.out.println(bd); 
    } 
} 
내가이 일을 더 간단한 방법이 희망하고 싶습니다

...

+0

간단하고 빠른 방법은 @ Peter의 대답으로 주어졌습니다. – Vadzim

+1

@ Vadzim : 그건 'BigDecimal (double)'생성자를 호출하는 것이므로 거의 IMO가 아닙니다. 그리고 우리는 여전히 반올림과 절사 측면에서 OP가 원하는 것을 알지 못합니다. 하지만 여러 옵션을 사용하는 것이 좋습니다. –

0

편집

이 시도 :

double d = 25.642; 
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.'))); 
System.out.println(s); 

나는이 바보 같은 방법은 알고 있지만, 그것을 작동합니다.

+0

죄송합니다, 문제가 해결되지 않은 경우 –

6

2.40

BigDecimal bd = new BigDecimal(2.44); 
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2)); 
1

는 다음 시도 출력 :

double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice)/10.0; 
관련 문제