2012-10-02 2 views
2

이것은 내 프로그램입니다. 아주 간단하게 말하면, 입력 된 숫자를 주어진 소수 자리로 반올림한다고 가정합니다. 나는. 4.245는 2 자리 소수로 반올림하면 4.25를 얻습니다. 그러나 항상 정수로 반올림 만하면됩니다 ... 왜? 무엇 나를 당혹 것은 내가 안드로이드에 동일한 코드를 사용하는 것이이며 완벽하게Math.round()가 제대로 작동하지 않습니다.

import java.util.Scanner; 


public class Rounder { 

public static void main(String[] args) { 
    double input1, roundednumber; 
    int input2; 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("number to round "); 
    input1 = keyboard.nextDouble(); 
    System.out.println("decimals"); 
    input2 = keyboard.nextInt(); 

    roundednumber = rounder(input1, input2); 
    System.out.println(roundednumber); 
} 


public static double rounder(double number, int decimals){ 
    int multiplier = (int) Math.pow(10, decimals); 
    double roundednumber; 
    roundednumber = Math.round(number*multiplier)/multiplier; 
    return roundednumber;  
} 
} 

작동 그리고 여기

double result1 = fv1/(Math.pow(1+(r1/n1),n1*t1)); 
result1 = (double) (Math.round(result1 * 100))/100; 
+1

반올림 목적으로 [BigDecimal] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html)을 사용해보십시오. –

+2

정수 나누기 : Math.round()는 int를 반환하고 int로 나눕니다. 쓰기 Math.round (...)/(double) multiplied; 대신. –

+0

'double's로 "십진법"을 반올림하면 거의 나쁜 결과를 얻을 수 있습니다. –

답변

6

디바이 딩을 시도 내 안드로이드 클래스의 조각입니다 정수는 정수를 생성하므로 다음을 사용할 수 있습니다.

Math.round(number * multiplier)/(double)multiplier; 
+0

감사합니다 ... 완전히 정수로 나누는 것을 잊었습니다 ... 감사합니다. – Killerpixler

0

에 의해

roundednumber = Math.round(number*multiplier)/((double)(multiplier)); 
0

Math.round()가 int를 반환하고 int로 나누기 때문입니다. 결과적으로 int가됩니다.

관련 문제