일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- JavaScript
- IntelliJ
- Source
- Eclipse
- jpa
- MSSQL
- git
- Exception
- MySQL
- myBatis
- Core Java
- 오픈소스
- 설정
- PostgreSQL
- Spring Boot
- AJAX
- 문서
- JDBC
- Tomcat
- oracle
- ubuntu
- Docker
- STS
- Python
- Open Source
- Thymeleaf
- error
- SpringBoot
- maven
- spring
- Today
- Total
헤르메스 LIFE
BigDecimal타입의 사칙연산 본문
엄청 큰 숫자형의 연산은 BigDecimal 형으로 변경 후 계산을 하면 좋습니다.
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal bdcl1 = new BigDecimal("12345678901234567899");
BigDecimal bdcl2 = new BigDecimal("12345678901234567890");
// 더하기
BigDecimal p_add = bdcl1.add(bdcl2);
// 빼기
BigDecimal p_sub = bdcl1.subtract(bdcl2);
// 곱하기
BigDecimal p_mul = bdcl1.multiply(bdcl2);
// 나누기 - 무조건 반올림
BigDecimal p_div1 = bdcl1.divide(bdcl2, BigDecimal.ROUND_UP);
// 나누기 - 소수점 4번째 자리에서 반올림.
BigDecimal p_div2 = bdcl1.divide(bdcl2, 4, BigDecimal.ROUND_UP);
System.out.println("덧셈 : " + p_add);
System.out.println("뺄셈 : " + p_sub);
System.out.println("곱셈 : " + p_mul);
System.out.println("나눗셈1 : " + p_div1);
System.out.println("나눗셈2 : " + p_div2);
}
}
=================================================================================
덧셈 : 24691357802469135789
뺄셈 : 9
곱셈 : 152415787532388367613016309986130163110
나눗셈1 : 2
나눗셈2 : 1.0001
정말 중요한 내용이 있습니다.
BigDecimal 의 연산은 누적이 됩니다. 주의하세요.
totalAmount1 과 totalAmount2의 결과가 틀립니다.
BigDecimal tAmount01 = new BigDecimal("0");
BigDecimal tAmount02 = new BigDecimal("0");
BigDecimal tAmount03 = new BigDecimal("0");
BigDecimal tAmount04 = new BigDecimal("0");
BigDecimal totalAmount1 = new BigDecimal("0");
BigDecimal totalAmount2 = new BigDecimal("0");
tAmount01 = tAmount01.add(new BigDecimal("2400"));
tAmount02 = tAmount02.add(new BigDecimal("4195.9"));
tAmount03 = tAmount03.add(new BigDecimal("2400"));
tAmount04 = tAmount04.add(new BigDecimal("4195.9"));
totalAmount1 = totalAmount1.add(tAmount01.add(tAmount02));
totalAmount2 = tAmount03.add(tAmount04);
System.out.println("totalAmount1 :: " + totalAmount1.toString());
System.out.println("totalAmount2 :: " + totalAmount2.toString());
tAmount01 = tAmount01.add(new BigDecimal("0"));
tAmount02 = tAmount02.add(new BigDecimal("182.53"));
tAmount03 = tAmount03.add(new BigDecimal("0"));
tAmount04 = tAmount04.add(new BigDecimal("182.53"));
totalAmount1 = totalAmount1.add(tAmount01.add(tAmount02));
totalAmount2 = tAmount03.add(tAmount04);
System.out.println("totalAmount1 :: " + totalAmount1.toString());
System.out.println("totalAmount2 :: " + totalAmount2.toString());
=================================================================================
totalAmount1 :: 6595.9
totalAmount2 :: 6595.9
totalAmount1 :: 13374.33
totalAmount2 :: 6778.43
'Core Java' 카테고리의 다른 글
외부프로그램 실행시키기 (0) | 2020.12.17 |
---|---|
Thread 를 이용한 데몬 프로그램 (0) | 2020.12.17 |
Java에서 Stored Procedure 실행 (0) | 2020.12.17 |
jxl의 사용 (0) | 2020.12.17 |
JDBC 버전확인 (0) | 2020.12.17 |