# Using Decimal Numbers

`NSDecimalNumber`

is an immutable subclass of `NSNumber`

that provides an object-oriented wrapper for doing base-10 arithmetic. An instance can represent any number that can be expressed as `mantissa x 10 exponent`

where *mantissa* is a decimal integer up to 38 digits long, and *exponent* is an integer between -128 and 127.

In the course of doing arithmetic, a method may produce calculation errors, such as division by zero. It may also meet circumstances where it has a choice of ways to round a number off. The way the method acts on such occasions is called its “behavior.”

Behavior is set by methods in the `NSDecimalNumberBehaviors`

protocol. Every `NSDecimalNumber`

argument called `behavior`

requires an object that conforms to this protocol. For more on behaviors, see the specifications for the `NSDecimalNumberBehaviors`

protocol and the `NSDecimalNumberHandler`

class. Also see the `defaultBehavior`

method description.

## C Interface to Decimal Numbers

You can access the arithmetic and rounding methods of `NSDecimalNumber`

through group of C functions:

You might consider the C interface if you don’t need to treat decimal numbers as objects—that is, if you don’t need to store them in an object-oriented collection like an instance of `NSArray`

or `NSDictionary`

. You might also consider the C interface if you need maximum efficiency. The C interface is faster and uses less memory than the `NSDecimalNumber`

class.

If you need mutability, you can combine the two interfaces. Use functions from the C interface and convert their results to instances of `NSDecimalNumber`

.

Copyright © 2008 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2008-02-08