이것은 내 프로그램입니다. 아주 간단하게 말하면, 입력 된 숫자를 주어진 소수 자리로 반올림한다고 가정합니다. 나는. 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;
반올림 목적으로 [BigDecimal] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html)을 사용해보십시오. –
정수 나누기 : Math.round()는 int를 반환하고 int로 나눕니다. 쓰기 Math.round (...)/(double) multiplied; 대신. –
'double's로 "십진법"을 반올림하면 거의 나쁜 결과를 얻을 수 있습니다. –