我正在寻找一种有效的方法来保存NSDecimalNumber
与NSData
缓冲区中的其他数据。
我没有找到直接从NSDecimalNumber
执行此操作的方法。
但是,很容易将其转换为:
NSDecimal value = [theDecimalNumber decimalValue];
在内存中传输NSDecimal
并不困难(20字节)。
但是,我的问题是: NSDecimalNumber
和NSDecimal
值是否完全相同?
因为他们的声明有一些差异(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;
是否可以在两种类型之间执行多次传输,而不会损失任何精度?
答案 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);
}
等待一种更“标准”的方法来执行这项工作