NSDecimal等于NSDecimalNumber值?

时间:2014-11-27 11:05:55

标签: ios objective-c nsdecimalnumber nsdecimal

我正在寻找一种有效的方法来保存NSDecimalNumberNSData缓冲区中的其他数据。

我没有找到直接从NSDecimalNumber执行此操作的方法。 但是,很容易将其转换为:

NSDecimal value = [theDecimalNumber decimalValue];

在内存中传输NSDecimal并不困难(20字节)。

但是,我的问题是: NSDecimalNumberNSDecimal值是否完全相同?

因为他们的声明有一些差异(ExternalRefCount?):

@interface NSDecimalNumber : NSNumber {
@private
    signed   int _exponent:8;
    unsigned int _length:4;
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:1;
    unsigned int _hasExternalRefCount:1;
    unsigned int _refs:16;
    unsigned short _mantissa[0]; /* GCC */
}

typedef struct {
    signed   int _exponent:8;
    unsigned int _length:4;     // length == 0 && isNegative -> NaN
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[NSDecimalMaxSize];
} NSDecimal;

是否可以在两种类型之间执行多次传输,而不会损失任何精度?

2 个答案:

答案 0 :(得分:0)

您是否尝试使用NSArchiver类方法?

NSData *data=[NSArchiver archivedDataWithRootObject:yourNumber];

答案 1 :(得分:0)

我做了很多计算,从一个转移到另一个没有任何问题。 所以我认为我们可以说它们是相同的。

我将NSDecimalNumber扩展为:

#define DecNum_SizeOf   20

+ (NSDecimalNumber *) fromPtr:(void *)ptr
{
    NSDecimal valueRead;
    memcpy (&valueRead, ptr, DecNum_SizeOf);
    return [NSDecimalNumber decimalNumberWithDecimal:valueRead];
}

- (void) toPtr:(void *)ptr
{
    NSDecimal valueWrite = [self decimalValue];
    memcpy (ptr, &valueWrite, DecNum_SizeOf);
}

等待一种更“标准”的方法来执行这项工作