How to use NSDecimalNumber?

前端 未结 4 567
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-30 00:51

I\'m building a app that needs to perform calculations on money.

I wonder how to properly use NSDecimalNumber, especially how to initialize it from integers, floats

4条回答
  •  死守一世寂寞
    2020-11-30 01:01

    Do NOT use NSNumber's +numberWith... methods to create NSDecimalNumber objects. They are declared to return NSNumber objects and are not guaranteed to function as NSDecimalNumber instances.

    This is explained in this thread by Bill Bumgarner, a developer at Apple. I would encourage you to file a bug against this behavior, referencing bug rdar://6487304.

    As an alternative these are all of the appropriate methods to use to create an NSDecimalNumber:

    + (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa
                         exponent:(short)exponent isNegative:(BOOL)flag;
    + (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
    + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
    + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(id)locale;
    
    + (NSDecimalNumber *)zero;
    + (NSDecimalNumber *)one;
    + (NSDecimalNumber *)minimumDecimalNumber;
    + (NSDecimalNumber *)maximumDecimalNumber;
    + (NSDecimalNumber *)notANumber;
    

    If you simply want an NSDecimalNumber from a float or int constant try something like this:

    NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:
                                 [[NSNumber numberWithFloat:2.75f] decimalValue];
    

提交回复
热议问题