Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Constants](https://developer.android.com/reference/android/icu/math/MathContext#constants) \| [Fields](https://developer.android.com/reference/android/icu/math/MathContext#lfields) \| [Ctors](https://developer.android.com/reference/android/icu/math/MathContext#pubctors) \| [Methods](https://developer.android.com/reference/android/icu/math/MathContext#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/icu/math/MathContext#inhmethods)

# MathContext

*** ** * ** ***

` public final class MathContext `   
` extends https://developer.android.com/reference/java/lang/Object ` ` implements https://developer.android.com/reference/java/io/Serializable `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.icu.math.MathContext |

<br />

*** ** * ** ***

The `MathContext` immutable class encapsulates the settings understood by the operator methods of the `https://developer.android.com/reference/android/icu/math/BigDecimal` class (and potentially other classes). Operator methods are those that effect an operation on a number or a pair of numbers.

The settings, which are not base-dependent, comprise:

1. `digits`: the number of digits (precision) to be used for an operation
2. `form`: the form of any exponent that results from the operation
3. `lostDigits`: whether checking for lost digits is enabled
4. `roundingMode`: the algorithm to be used for rounding.

When provided, a `MathContext` object supplies the settings for an operation directly.

When `MathContext.DEFAULT` is provided for a `MathContext` parameter then the default settings are used (`9, SCIENTIFIC, false, ROUND_HALF_UP`).

In the `BigDecimal` class, all methods which accept a `MathContext` object defaults) also have a version of the method which does not accept a MathContext parameter. These versions carry out unlimited precision fixed point arithmetic (as though the settings were (`0, PLAIN, false, ROUND_HALF_UP`).

The instance variables are shared with default access (so they are directly accessible to the `BigDecimal` class), but must never be changed.

The rounding mode constants have the same names and values as the constants of the same name in `java.math.BigDecimal`, to maintain compatibility with earlier versions of `BigDecimal`.
**See also:**

- `https://developer.android.com/reference/android/icu/math/BigDecimal`

## Summary

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ENGINEERING` Standard floating point notation (with engineering exponential format, where the power of ten is a multiple of 3). |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#PLAIN` Plain (fixed point) notation, without any exponent. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_CEILING` Rounding mode to round to a more positive number. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_DOWN` Rounding mode to round towards zero. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_FLOOR` Rounding mode to round to a more negative number. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_DOWN` Rounding mode to round to nearest neighbor, where an equidistant value is rounded down. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_EVEN` Rounding mode to round to nearest neighbor, where an equidistant value is rounded to the nearest even neighbor. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_UP` Rounding mode to round to nearest neighbor, where an equidistant value is rounded up. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_UNNECESSARY` Rounding mode to assert that no rounding is necessary. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_UP` Rounding mode to round away from zero. |
| `int` | `https://developer.android.com/reference/android/icu/math/MathContext#SCIENTIFIC` Standard floating point notation (with scientific exponential format, where there is one digit before any decimal point). |

| ### Fields ||
|---|---|
| ` public static final https://developer.android.com/reference/android/icu/math/MathContext` | `https://developer.android.com/reference/android/icu/math/MathContext#DEFAULT` A `MathContext` object initialized to the default settings for general-purpose arithmetic. |

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/icu/math/MathContext#MathContext(int)(int setdigits) ` Constructs a new `MathContext` with a specified precision. |
| ` https://developer.android.com/reference/android/icu/math/MathContext#MathContext(int,%20int)(int setdigits, int setform) ` Constructs a new `MathContext` with a specified precision and form. |
| ` https://developer.android.com/reference/android/icu/math/MathContext#MathContext(int,%20int,%20boolean)(int setdigits, int setform, boolean setlostdigits) ` Constructs a new `MathContext` with a specified precision, form, and lostDigits setting. |
| ` https://developer.android.com/reference/android/icu/math/MathContext#MathContext(int,%20int,%20boolean,%20int)(int setdigits, int setform, boolean setlostdigits, int setroundingmode) ` Constructs a new `MathContext` with a specified precision, form, lostDigits, and roundingMode setting. |

| ### Public methods ||
|---|---|
| ` int` | ` https://developer.android.com/reference/android/icu/math/MathContext#getDigits()() ` Returns the digits setting. |
| ` int` | ` https://developer.android.com/reference/android/icu/math/MathContext#getForm()() ` Returns the form setting. |
| ` boolean` | ` https://developer.android.com/reference/android/icu/math/MathContext#getLostDigits()() ` Returns the lostDigits setting. |
| ` int` | ` https://developer.android.com/reference/android/icu/math/MathContext#getRoundingMode()() ` Returns the roundingMode setting. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/icu/math/MathContext#toString()() ` Returns the `MathContext` as a readable string. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Constants

### ENGINEERING

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ENGINEERING
```

Standard floating point notation (with engineering exponential format, where the power of ten is a multiple of 3). Used as a setting to control the form of the result of a `BigDecimal` operation. A zero result in plain form may have a decimal part of one or more zeros.

<br />

**See also:**

- `https://developer.android.com/reference/android/icu/math/MathContext#PLAIN`
- `https://developer.android.com/reference/android/icu/math/MathContext#SCIENTIFIC`

Constant Value: 2 (0x00000002)

### PLAIN

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int PLAIN
```

Plain (fixed point) notation, without any exponent. Used as a setting to control the form of the result of a `BigDecimal` operation. A zero result in plain form may have a decimal part of one or more zeros.

<br />

**See also:**

- `https://developer.android.com/reference/android/icu/math/MathContext#ENGINEERING`
- `https://developer.android.com/reference/android/icu/math/MathContext#SCIENTIFIC`

Constant Value: 0 (0x00000000)

### ROUND_CEILING

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_CEILING
```

Rounding mode to round to a more positive number. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If any of the discarded digits are non-zero then the result should be rounded towards the next more positive digit.

<br />

Constant Value: 2 (0x00000002)

### ROUND_DOWN

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_DOWN
```

Rounding mode to round towards zero. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

All discarded digits are ignored (truncated). The result is neither incremented nor decremented.

<br />

Constant Value: 1 (0x00000001)

### ROUND_FLOOR

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_FLOOR
```

Rounding mode to round to a more negative number. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If any of the discarded digits are non-zero then the result should be rounded towards the next more negative digit.

<br />

Constant Value: 3 (0x00000003)

### ROUND_HALF_DOWN

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_HALF_DOWN
```

Rounding mode to round to nearest neighbor, where an equidistant value is rounded down. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If the discarded digits represent greater than half (0.5 times) the value of a one in the next position then the result should be rounded up (away from zero). Otherwise the discarded digits are ignored.

<br />

Constant Value: 5 (0x00000005)

### ROUND_HALF_EVEN

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_HALF_EVEN
```

Rounding mode to round to nearest neighbor, where an equidistant value is rounded to the nearest even neighbor. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If the discarded digits represent greater than half (0.5 times) the value of a one in the next position then the result should be rounded up (away from zero). If they represent less than half, then the result should be rounded down.

Otherwise (they represent exactly half) the result is rounded down if its rightmost digit is even, or rounded up if its rightmost digit is odd (to make an even digit).

<br />

Constant Value: 6 (0x00000006)

### ROUND_HALF_UP

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_HALF_UP
```

Rounding mode to round to nearest neighbor, where an equidistant value is rounded up. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If the discarded digits represent greater than or equal to half (0.5 times) the value of a one in the next position then the result should be rounded up (away from zero). Otherwise the discarded digits are ignored.

<br />

Constant Value: 4 (0x00000004)

### ROUND_UNNECESSARY

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_UNNECESSARY
```

Rounding mode to assert that no rounding is necessary. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

Rounding (potential loss of information) is not permitted. If any of the discarded digits are non-zero then an `ArithmeticException` should be thrown.

<br />

Constant Value: 7 (0x00000007)

### ROUND_UP

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUND_UP
```

Rounding mode to round away from zero. Used as a setting to control the rounding mode used during a `BigDecimal` operation.

If any of the discarded digits are non-zero then the result will be rounded up (away from zero).

<br />

Constant Value: 0 (0x00000000)

### SCIENTIFIC

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int SCIENTIFIC
```

Standard floating point notation (with scientific exponential format, where there is one digit before any decimal point). Used as a setting to control the form of the result of a `BigDecimal` operation. A zero result in plain form may have a decimal part of one or more zeros.

<br />

**See also:**

- `https://developer.android.com/reference/android/icu/math/MathContext#ENGINEERING`
- `https://developer.android.com/reference/android/icu/math/MathContext#PLAIN`

Constant Value: 1 (0x00000001)

## Fields

### DEFAULT

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final MathContext DEFAULT
```

A `MathContext` object initialized to the default settings for general-purpose arithmetic. That is, `digits=9 form=SCIENTIFIC lostDigits=false roundingMode=ROUND_HALF_UP`.

<br />

**See also:**

- `https://developer.android.com/reference/android/icu/math/MathContext#SCIENTIFIC`
- `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_UP`

## Public constructors

### MathContext

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MathContext (int setdigits)
```

Constructs a new `MathContext` with a specified precision. The other settings are set to the default values (see `https://developer.android.com/reference/android/icu/math/MathContext#DEFAULT`). An `IllegalArgumentException` is thrown if the `setdigits` parameter is out of range (\<0 or \>999999999).

<br />

| Parameters ||
|---|---|
| `setdigits` | `int`: The `int` digits setting for this `MathContext`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | parameter out of range. |

### MathContext

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MathContext (int setdigits, 
                int setform)
```

Constructs a new `MathContext` with a specified precision and form. The other settings are set to the default values (see `https://developer.android.com/reference/android/icu/math/MathContext#DEFAULT`). An `IllegalArgumentException` is thrown if the `setdigits` parameter is out of range (\<0 or \>999999999), or if the value given for the `setform` parameter is not one of the appropriate constants.

<br />

| Parameters ||
|---|---|
| `setdigits` | `int`: The `int` digits setting for this `MathContext`. <br /> |
| `setform` | `int`: The `int` form setting for this `MathContext`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | parameter out of range. |

### MathContext

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MathContext (int setdigits, 
                int setform, 
                boolean setlostdigits)
```

Constructs a new `MathContext` with a specified precision, form, and lostDigits setting. The roundingMode setting is set to its default value (see `https://developer.android.com/reference/android/icu/math/MathContext#DEFAULT`). An `IllegalArgumentException` is thrown if the `setdigits` parameter is out of range (\<0 or \>999999999), or if the value given for the `setform` parameter is not one of the appropriate constants.

<br />

| Parameters ||
|---|---|
| `setdigits` | `int`: The `int` digits setting for this `MathContext`. <br /> |
| `setform` | `int`: The `int` form setting for this `MathContext`. <br /> |
| `setlostdigits` | `boolean`: The `boolean` lostDigits setting for this `MathContext`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | parameter out of range. |

### MathContext

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MathContext (int setdigits, 
                int setform, 
                boolean setlostdigits, 
                int setroundingmode)
```

Constructs a new `MathContext` with a specified precision, form, lostDigits, and roundingMode setting. An `IllegalArgumentException` is thrown if the `setdigits` parameter is out of range (\<0 or \>999999999), or if the value given for the `setform` or `setroundingmode` parameters is not one of the appropriate constants.

<br />

| Parameters ||
|---|---|
| `setdigits` | `int`: The `int` digits setting for this `MathContext`. <br /> |
| `setform` | `int`: The `int` form setting for this `MathContext`. <br /> |
| `setlostdigits` | `boolean`: The `boolean` lostDigits setting for this `MathContext`. <br /> |
| `setroundingmode` | `int`: The `int` roundingMode setting for this `MathContext`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | parameter out of range. |

## Public methods

### getDigits

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getDigits ()
```

Returns the digits setting. This value is always non-negative.

<br />

| Returns ||
|---|---|
| `int` | an `int` which is the value of the digits setting <br /> |

### getForm

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getForm ()
```

Returns the form setting. This will be one of `https://developer.android.com/reference/android/icu/math/MathContext#ENGINEERING`, `https://developer.android.com/reference/android/icu/math/MathContext#PLAIN`, or `https://developer.android.com/reference/android/icu/math/MathContext#SCIENTIFIC`.

<br />

| Returns ||
|---|---|
| `int` | an `int` which is the value of the form setting <br /> |

### getLostDigits

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean getLostDigits ()
```

Returns the lostDigits setting. This will be either `true` (enabled) or `false` (disabled).

<br />

| Returns ||
|---|---|
| `boolean` | a `boolean` which is the value of the lostDigits setting <br /> |

### getRoundingMode

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getRoundingMode ()
```

Returns the roundingMode setting. This will be one of `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_CEILING`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_DOWN`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_FLOOR`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_DOWN`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_EVEN`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_HALF_UP`, `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_UNNECESSARY`, or `https://developer.android.com/reference/android/icu/math/MathContext#ROUND_UP`.

<br />

| Returns ||
|---|---|
| `int` | an `int` which is the value of the roundingMode setting <br /> |

### toString

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public String toString ()
```

Returns the `MathContext` as a readable string. The `String` returned represents the settings of the `MathContext` object as four blank-delimited words separated by a single blank and with no leading or trailing blanks, as follows:

1. `digits=`, immediately followed by the value of the digits setting as a numeric word.
2. `form=`, immediately followed by the value of the form setting as an uppercase word (one of `SCIENTIFIC`, `PLAIN`, or `ENGINEERING`).
3. `lostDigits=`, immediately followed by the value of the lostDigits setting (`1` if enabled, `0` if disabled).
4. `roundingMode=`, immediately followed by the value of the roundingMode setting as a word. This word will be the same as the name of the corresponding public constant.

For example:   
` digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP `

Additional words may be appended to the result of `toString` in the future if more properties are added to the class.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | a `String` representing the context settings. <br /> |