내가 코드를 사용하는 0.2 의 간격으로 값의 배열을 생성 할잘림 오류가
-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994
내가 원하는 출력이
-0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0
는 어떻게해야합니까 반면?
내가 코드를 사용하는 0.2 의 간격으로 값의 배열을 생성 할잘림 오류가
-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994
내가 원하는 출력이
-0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0
는 어떻게해야합니까 반면?
같은 것을 사용할 수있는 부동 소수점 연산을하지 않으려면, 다음하지 않습니다 부동 소수점 유형을 사용하십시오. Float
및 Double
은 Java 코어 라이브러리에서 유일하지 않은 Number
이 아닙니다. 지금하시는 일은 BigDecimal
입니다. 관련/DUP 수
import java.math.BigDecimal;
public class TrialCode {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("-1.0");
BigDecimal b = new BigDecimal("0.2");
for (int i = 0; i < 10; i++) {
a = a.add(b);
System.out.println(a);
}
}
}
부동 소수점 숫자는 특정 정밀도까지만 작동합니다. float
의 경우 유효 자릿수는 6 - 7이며 double
의 경우 유효 자릿수는 15-16입니다. 그리고 이진 표현 때문에 0.1과 같은 간단한 십진수는 정확하게 표현 될 수 없습니다.
당신이 원하는 :
이System.out.printf("%.1f", a);
나는이 대답을하고 있었다. –
java가 printf를 가지고 있거나 println 일 수 있습니까? – ItayB
@ItayB 예 [printf를 사용해야하는 형식 문자열 사용] (http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html) –
당신은
new DecimalFormat("#.#").format(0.19999997); //"0.2"
: http://stackoverflow.com/questions/327544/strange-floating-point-behaviour-in-a-java-program – Krease