일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 컴퓨터과학개론
- Elk
- spring
- 초보코딩
- 기초코딩
- 자바
- Java
- 이클립스
- 초보코딩탈출
- 프로그래밍기초
- JShell
- 스프링 기초
- eclips
- 코딩초보
- 자바 스프링
- 메소드
- 데이터베이스
- Git
- JAVA기초
- 스프링
- 알고리즘
- 프로그래밍
- 자바프로그래밍
- 배열
- github
- 제이쉘
- 프로그래밍언어
- 자바기초
- 리눅스
- 클래스
- Today
- Total
키보드워리어
【자바】부동소수점 연산 본문
BigDecimal 클래스
왜 자바 프로그래밍에서 연산을 사용할 때에는 기본형으로 double이나 float이 아닌 정수형 int를 쓰는 걸까요?
그 이유는 정확한 계산을 필요로 하는 수학이나, 경제 분야에서 이러한 계산 오류가 나오면 큰일 나기 때문입니다.
JSHELL로 부동소수점 계산을 해보면, 실제 값은 68.79129876이어야 하는 값에서
계산이 잘못된 것을 확인해보실 수 있습니다.
이러한 문제를 해결하기 위하여 BigDecimal 메서드를 소개합니다.
※b1+b2 이런 식으로 계산하지 않고. add 메서드를 씁니다!
BigDecimal(큰 소수점) 클래스는 정확한 계산을 해주어요.
여기서 중요한 점은 BigDecimal 클래스는 불변하는 변수를 만들기 때문에 한번 생성하면
변경 불가능하다는 것을 참고해주세요!
불변하는 변수: 한번 정해진 값을 되돌릴 수 없음
변하는 변수: 그때그때마다 값을 바꾸면 됨
변경 불가능한 값은 이후에 문자열과 wrapper 클래스 때 더 다루겠습니다.
지금 기억할 것은 변경 불가능한 클래스는 값을 딱 한 번만 지정할 수 있다는 겁니다.
참고로 이렇게 [tab]을 누르면 내가 할 수 있는 메서드가 무엇이 있는지 볼 수 있어요.
그리고 BigDecimal 클래스는 string형으로 값을 입력해주어야 정확한 값을 얻을 수 있습니다.
(인자 값에 ""추가할 것!)
BigDecimal 퍼즐 - Integer형 추가해보기
BigDecimal 메서드는 String 타입이기 때문에 int 형은 추가할 수 없답니다.
이럴 때 해결방법은 아래와 같습니다.
위와 같이 int형 i를 BigDecimal로 씌워서 변환시키면 Divide, multiply 모두 같은 메커니즘으로 사용해볼 수 있겠네요.
BigDecimal 연습문제 - 단리 계산
아래와 같이 단리 계산하는 문제를 내보겠습니다. 아래 코드를 살펴보고 SimpleInterestCalculator 클래스를 만들어보세요!
이것은 단리를 계산해주는 주석입니다. 참고해주세요.
Package java.lang.*
public class SimpleInterestCalculator {
BigDecimal principal; // 원리
BigDecimal interest; // 이자율
public SimpleInterestCalculator(String principal, String interest) { // 생성자는 원리와 이자율을 무조건 넣어주어야함
this.principal = new BigDecimal(principal); // 원리를 BigDecimal에 넣어줌
this.interest = new BigDecimal(interest).divide(new BigDecimal(100)); // interest는 100을 나누어주어야함
}
public BigDecimal calculateTotalValue(int noOfYears) {
// principal + principal * interest * noOfYears
BigDecimal totalValue = principal.add( //더하기, 곱하기 메소드 쓰임
principal.multiply(interest.
multiply(new BigDecimal(noOfYears)))); //정수형 noOfYears는 BigDecimal로 바꾸어주어야함
return totalValue;
}
}
public class SimpleInterestCalculatorRunner {
public static void main(String[] args) {
SimpleInterestCalculator calculator = new SimpleInterestCalculator("4500.00", “7.5");
//원금과 이자율을 생성자로 만들어줌.
BigDecimal totalValue = calculator.calculateTotalValue(5); //연도를 작성함
System.out.println(totalValue);
}
}
import
참고로 import란 다른 패키지로부터 클래스를 사용하는 소스파일들을 부를 때 쓰는 표현입니다.
그래서 SimpleInterCalculation클래스와 SimpleInterCalculationRunner 클래스는 import로 java.math.BigDecimal를 사용한 겁니다.
package java.lang.*
Package java.lang.* 은 자동으로 가져옵니다.
접미사.*는 자바 lang패키지의 모든 클래스를 가져온다는 걸 나타냅니다.
'JAVA > 입문' 카테고리의 다른 글
【자바】Boolean - 단축평가 논리연산자 (0) | 2022.11.25 |
---|---|
【자바】Boolean형 (0) | 2022.11.23 |
【자바】정수형 integer 타입 (0) | 2022.11.19 |
【자바】기본 자료형 소개 및 ,형(type)변경 하는 법 (0) | 2022.11.17 |
【자바】자바 생성자 소개 (0) | 2022.11.15 |