Big Numbers

Info

Semua file yang ada pada contoh pada catatan ini ada pada package Ch3/J3_9_Big_Numbers

Jika presisi angka menggunakan basic int atau floating-point tidak cukup, kita dapat merubah nilai tersebut ke class yang ada pada package java.math: yaitu BigInteger dan BigDecimal. Class tersebut digunakan untuk memanipulasi digit angka yang panjang .

Gunakan static method valueOf untuk merubah angka biasa kedalam big number:

Code

package Ch3.J_3_9_BigNumbers;

import java.math.BigDecimal;
import java.math.BigInteger;

public class J_1_ValueOf {
    public static void main(String[] args) {
        int angka = 20000;
        BigInteger angkaBig = BigInteger.valueOf(angka);
        System.out.println(angkaBig);
        System.out.printf("Variable angkaBig instanceof BigInteger : %b\n",angkaBig instanceof BigInteger);

        BigDecimal angkaDecimalBig = BigDecimal.valueOf(240654698480.4848);
        System.out.println(angkaDecimalBig);
        System.out.printf("Variable angkaBig instanceof BigInteger : %b",angkaDecimalBig instanceof BigDecimal);

    }
}
Output
20000
Variable angkaBig instanceof BigInteger : true
240654698480.4848
Variable angkaBig instanceof BigInteger : true

Untuk angka yang sagat panjang, kita akan menggunakan constructor dengan parameter String yang berisis angka panjang tersebut:

Code

package Ch3.J_3_9_BigNumbers;

import java.math.BigDecimal;

public class J_1_BigNumbers_From_Strings {
    public static void main(String[] args) {
        double angka = 241491919819196116351616116964163.164896819841984198198498735498419819849874987;
        String angkaString = "241491919819196116351616116964163.164896819841984198198498735498419819849874987";

        BigDecimal bd = BigDecimal.valueOf(angka);
        System.out.print("BigDecimal dari `valueOf` : ");
        System.out.println(bd);

        BigDecimal bdFromString = new BigDecimal(angkaString);
        System.out.print("BigDecimal dari `constructor` : ");
        System.out.println(bdFromString);
    }
}
Output
BigDecimal dari `valueOf` : 2.414919198191961E+32
BigDecimal dari `constructor` : 241491919819196116351616116964163.164896819841984198198498735498419819849874987

Namun, sayangnya, kita tidak dapat menggunakan operator yang biasa kita pakai saat melakukan operasi matematika seperti +, -, dan serupanya. Namun, kita harus menggunakan method yang disediakan untuk instance class tersebut seperti add, multiply dan semisalnya.

Code

package Ch3.J_3_9_BigNumbers;

import java.math.BigInteger;

public class J_1_math_operator {
    public static void main(String[] args) {
        int angka = 27;
        BigInteger bi = BigInteger.valueOf(angka);

        // bi + 2 will trigger error at compile time

        BigInteger angka2 = new BigInteger("3");
        System.out.println(bi.add(angka2));
        System.out.println(bi.subtract(angka2));
        System.out.println(bi.multiply(angka2));
        System.out.println(bi.divide(angka2));
        System.out.println(bi.mod(angka2));
    }
}
Output
30
24
81
9
0