java 소수점 처리
- 데이터 타입이 float 이나 double 이어야 합니다.
ex) 나누기 연산을 해서 소수 둘째자리까지 출력하는 방법.
1. String.format
- 반올림 된 값으로 결과값 출력.
- 소수점 자릿수 지정(고정)
private static void div(int mb) {
double gb = (double)mb / 1024;
System.out.println("\n---------------------------------");
System.out.println("" + mb + " / 1024 = " + gb);
System.out.println("String.format = " + String.format("%.2f", gb));
}
div(1024);
div(1540);
div(1550);
div(1400);
결과 :
---------------------------------
1024 / 1024 = 1.0
String.format = 1.00
---------------------------------
1540 / 1024 = 1.50390625
String.format = 1.50
---------------------------------
1550 / 1024 = 1.513671875
String.format = 1.51
---------------------------------
1400 / 1024 = 1.3671875
String.format = 1.37
2. BigDecimal
- 반올림/올림/내림 설정 가능.
- 소수점 자릿수 지정(고정 / 마지막이 0 인 경우 버림 가능)
private static void div(int mb) {
double gb = (double)mb / 1024;
System.out.println("\n---------------------------------");
System.out.println("" + mb + " / 1024 = " + gb);
BigDecimal bdMb = new BigDecimal(mb);
BigDecimal bdKb = new BigDecimal(1024);
System.out.println("BigDecimal = " + bdMb.divide(bdKb, 2, RoundingMode.DOWN));
System.out.println("BigDecimal(stripTrailingZeros) = " + bdMb.divide(bdKb, 2, RoundingMode.DOWN).stripTrailingZeros());
}
div(1024);
div(1540);
div(1550);
div(1400);
---------------------------------
1024 / 1024 = 1.0
BigDecimal = 1.00
BigDecimal(stripTrailingZeros) = 1
---------------------------------
1540 / 1024 = 1.50390625
BigDecimal = 1.50
BigDecimal(stripTrailingZeros) = 1.5
---------------------------------
1550 / 1024 = 1.513671875
BigDecimal = 1.51
BigDecimal(stripTrailingZeros) = 1.51
---------------------------------
1400 / 1024 = 1.3671875
BigDecimal = 1.36
BigDecimal(stripTrailingZeros) = 1.36
3. DecimalFormat
- 반올림 된 값으로 결과값 출력.
- 소수점 자릿수 지정(고정 / 마지막이 0 인 경우 버림 가능 / 0 버림 갯수 지정 가능)
private static void div(int mb) {
double gb = (double)mb / 1024;
System.out.println("\n---------------------------------");
System.out.println("" + mb + " / 1024 = " + gb);
DecimalFormat formatter = new DecimalFormat("0.##");
System.out.println("DecimalFormat(0.##) = " + formatter.format(gb));
DecimalFormat formatter2 = new DecimalFormat("0.0#");
System.out.println("DecimalFormat(0.0#) = " + formatter2.format(gb));
}
div(1024);
div(1540);
div(1550);
div(1400);
결과 :
---------------------------------
1024 / 1024 = 1.0
DecimalFormat(0.##) = 1
DecimalFormat(0.0#) = 1.0
---------------------------------
1540 / 1024 = 1.50390625
DecimalFormat(0.##) = 1.5
DecimalFormat(0.0#) = 1.5
---------------------------------
1550 / 1024 = 1.513671875
DecimalFormat(0.##) = 1.51
DecimalFormat(0.0#) = 1.51
---------------------------------
1400 / 1024 = 1.3671875
DecimalFormat(0.##) = 1.37
DecimalFormat(0.0#) = 1.37
4. DecimalFormat + BigDecimal
- 반올림 된 값으로 결과값 출력.
- 소수점 자릿수 지정(고정 / 마지막이 0 인 경우 버림 가능 / 0 버림 갯수 지정 가능)
private static void div(int mb) {
double gb = (double)mb / 1024;
System.out.println("\n---------------------------------");
System.out.println("" + mb + " / 1024 = " + gb);
DecimalFormat formatter = new DecimalFormat("0.##");
DecimalFormat formatter2 = new DecimalFormat("0.0#");
System.out.println("DecimalFormat(BigDecimal, 0.##) = " + formatter.format(bdMb.divide(bdKb, 2, RoundingMode.DOWN)));
System.out.println("DecimalFormat(BigDecimal, 0.0#) = " + formatter2.format(bdMb.divide(bdKb, 2, RoundingMode.DOWN)));
}
div(1024);
div(1540);
div(1550);
div(1400);
결과 :
---------------------------------
1024 / 1024 = 1.0
DecimalFormat(BigDecimal, 0.##) = 1
DecimalFormat(BigDecimal, 0.0#) = 1.0
---------------------------------
1540 / 1024 = 1.50390625
DecimalFormat(BigDecimal, 0.##) = 1.5
DecimalFormat(BigDecimal, 0.0#) = 1.5
---------------------------------
1550 / 1024 = 1.513671875
DecimalFormat(BigDecimal, 0.##) = 1.51
DecimalFormat(BigDecimal, 0.0#) = 1.51
---------------------------------
1400 / 1024 = 1.3671875
DecimalFormat(BigDecimal, 0.##) = 1.36
DecimalFormat(BigDecimal, 0.0#) = 1.36