# Introduction

Java.Math does exactly what it’s name implies. Mathematics. There’s something special is going on with the math class. It’s methods are all static. In other words they don’t have to be initialized. You can call them all in the static way, e.g. without the ‘new’ keyword. So to compute the sqare of a value we say:

`Math.square(value);`

Other examples of simple calculations:

`Math.round(number to round);`
`Math.ceil(Number to Ceil);`

Etcetera…..

Math also introduces special numbers like the BigDecimal.

```// Create via a string
BigDecimal bd1 = new BigDecimal("123456789.0123456890");

// Create via a long
BigDecimal bd2 = BigDecimal.valueOf(123L);

bd1 = bd1.multiply(bd2);
bd1 = bd1.subtract(bd2);
bd1 = bd1.divide(bd2, BigDecimal.ROUND_UP);
bd1 = bd1.negate();```

As you see the BigDecimal is an exception. It’s an encapsulated class, similar to Integer, Boolean or Char.

Some more examples:

```// Create via a string
BigInteger bi1 = new BigInteger("1234567890123456890");

// Create via a long
BigInteger bi2 = BigInteger.valueOf(123L);

bi1 = bi1.multiply(bi2);
bi1 = bi1.subtract(bi2);
bi1 = bi1.divide(bi2);
bi1 = bi1.negate();
int exponent = 2;
bi1 = bi1.pow(exponent);```
```// Get a byte array
byte[] bytes = new byte[]{(byte)0x12, (byte)0x0F, (byte)0xF0};

// Create a BigInteger using the byte array
BigInteger bi = new BigInteger(bytes);

// Format to binary
String s = bi.toString(2);      // 100100000111111110000

// Format to octal
s = bi.toString(8);             // 4407760

// Format to decimal
s = bi.toString();              // 1183728

s = bi.toString(16);            // 120ff0
if (s.length() % 2 != 0) {
s = "0"+s;
}

// Parse binary string
bi = new BigInteger("100100000111111110000", 2);

// Parse octal string
bi = new BigInteger("4407760", 8);

// Parse decimal string
bi = new BigInteger("1183728");