MathContext (Java SE 26 & JDK 26)
Description: declaration: module: java.base, package: java.math, class: MathContext
Keywords: java.math.MathContext class

# Class MathContext

java.lang.Object
java.math.MathContext

All Implemented Interfaces:
  `Serializable`

public final class MathContext extends Object implements Serializable
Immutable objects which encapsulate the context settings which describe certain rules for numerical operators, such as those implemented by the `BigDecimal` class.

The base-independent settings are:

1. `precision`: the number of digits to be used for an operation; results are rounded to this precision
2. `roundingMode`: a `RoundingMode` object which specifies the algorithm to be used for rounding.

Since:
  1.5
External Specifications
  - IEEE Standard for Floating-Point Arithmetic
See Also:
  - `BigDecimal`
  - `RoundingMode`
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final MathContext`
  `DECIMAL128`
  A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal128 format, 34 digits, and a rounding mode of `HALF_EVEN`.
  `static final MathContext`
  `DECIMAL32`
  A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal32 format, 7 digits, and a rounding mode of `HALF_EVEN`.
  `static final MathContext`
  `DECIMAL64`
  A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal64 format, 16 digits, and a rounding mode of `HALF_EVEN`.
  `static final MathContext`
  `UNLIMITED`
  A `MathContext` object whose settings have the values required for unlimited precision arithmetic.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MathContext(int setPrecision)`
  Constructs a new `MathContext` with the specified precision and the `HALF_UP` rounding mode.
  `MathContext(int setPrecision, RoundingMode setRoundingMode)`
  Constructs a new `MathContext` with a specified precision and rounding mode.
  `MathContext(String val)`
  Constructs a new `MathContext` from a string.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object x)`
  Compares this `MathContext` with the specified `Object` for equality.
  `int`
  `getPrecision()`
  Returns the `precision` setting.
  `RoundingMode`
  `getRoundingMode()`
  Returns the roundingMode setting.
  `int`
  `hashCode()`
  Returns the hash code for this `MathContext`.
  `String`
  `toString()`
  Returns the string representation of this `MathContext`.

  ### Methods declared in class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(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`
  `wait(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.

- ## Field Details

  - ### UNLIMITED

    public static final MathContext UNLIMITED
    A `MathContext` object whose settings have the values required for unlimited precision arithmetic. The values of the settings are: `precision=0 roundingMode=HALF_UP`

  - ### DECIMAL32

    public static final MathContext DECIMAL32
    A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal32 format, 7 digits, and a rounding mode of `HALF_EVEN`. Note the exponent range of decimal32 (min exponent of -95, max exponent of 96) is not used for rounding.

  - ### DECIMAL64

    public static final MathContext DECIMAL64
    A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal64 format, 16 digits, and a rounding mode of `HALF_EVEN`. Note the exponent range of decimal64 (min exponent of -383, max exponent of 384) is not used for rounding.

  - ### DECIMAL128

    public static final MathContext DECIMAL128
    A `MathContext` object with a precision setting matching the precision of the IEEE 754-2019 decimal128 format, 34 digits, and a rounding mode of `HALF_EVEN`. Note the exponent range of decimal128 (min exponent of -6143, max exponent of 6144) is not used for rounding.

- ## Constructor Details

  - ### MathContext

    public MathContext(int setPrecision)
    Constructs a new `MathContext` with the specified precision and the `HALF_UP` rounding mode.
    Parameters:
      `setPrecision` - The non-negative `int` precision setting.
    Throws:
      `IllegalArgumentException` - if the `setPrecision` parameter is less than zero.

  - ### MathContext

    public MathContext(int setPrecision, RoundingMode setRoundingMode)
    Constructs a new `MathContext` with a specified precision and rounding mode.
    Parameters:
      `setPrecision` - The non-negative `int` precision setting.
      `setRoundingMode` - The rounding mode to use.
    Throws:
      `IllegalArgumentException` - if the `setPrecision` parameter is less than zero.
      `NullPointerException` - if the rounding mode argument is `null`

  - ### MathContext

    public MathContext(String val)
    Constructs a new `MathContext` from a string. The string must be in the same format as that produced by the `toString()` method.

    An `IllegalArgumentException` is thrown if the precision section of the string is out of range (`< 0`) or the string is not in the format created by the `toString()` method.

    Parameters:
      `val` - The string to be parsed
    Throws:
      `IllegalArgumentException` - if the precision section is out of range or of incorrect format
      `NullPointerException` - if the argument is `null`

- ## Method Details

  - ### getPrecision

    public int getPrecision()
    Returns the `precision` setting. This value is always non-negative.
    Returns:
      an `int` which is the value of the `precision` setting

  - ### getRoundingMode

    public RoundingMode getRoundingMode()
    Returns the roundingMode setting. This will be one of `RoundingMode.CEILING`, `RoundingMode.DOWN`, `RoundingMode.FLOOR`, `RoundingMode.HALF_DOWN`, `RoundingMode.HALF_EVEN`, `RoundingMode.HALF_UP`, `RoundingMode.UNNECESSARY`, or `RoundingMode.UP`.
    Returns:
      a `RoundingMode` object which is the value of the `roundingMode` setting

  - ### equals

    public boolean equals(Object x)
    Compares this `MathContext` with the specified `Object` for equality.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `x` - `Object` to which this `MathContext` is to be compared.
    Returns:
      `true` if and only if the specified `Object` is a `MathContext` object which has exactly the same settings as this object
    See Also:
      - `Object.hashCode()`
      - `HashMap`

  - ### hashCode

    public int hashCode()
    Returns the hash code for this `MathContext`.
    Overrides:
      `hashCode` in class `Object`
    Returns:
      hash code for this `MathContext`
    See Also:
      - `Object.equals(java.lang.Object)`
      - `System.identityHashCode(Object)`

  - ### toString

    public String toString()
    Returns the string representation of this `MathContext`. The `String` returned represents the settings of the `MathContext` object as two space-delimited words (separated by a single space character, `'\u0020'`, and with no leading or trailing white space), as follows:
    1. The string `"precision="`, immediately followed by the value of the precision setting as a numeric string as if generated by the `Integer.toString` method.
    2. The string `"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 in the `RoundingMode` enum.

    For example:

        precision=9 roundingMode=HALF_UP

    Additional words may be appended to the result of `toString` in the future if more properties are added to this class.
    Overrides:
      `toString` in class `Object`
    Returns:
      a `String` representing the context settings