Re: extracting the mantissa for a NSDecimal
Re: extracting the mantissa for a NSDecimal
- Subject: Re: extracting the mantissa for a NSDecimal
- From: Roland King <email@hidden>
- Date: Fri, 20 Nov 2009 20:32:05 +0800
I don't know if he ever did get an answer however your method of putting it in an NSData is a much better idea and the original question sort of missed the point.
Yes there is a constructor for NSDecimalNumber which allows you to give a mantissa and an exponent, but that doesn't mean the number is stored in a way which lets you get those out again. For instance mantissa 123 with exponent 3 is the same number as 123000 with exponent 0. It's true that it would be possible for NSDecimalNumber to have an instance method which returned one possible combination of mantissa, exponent and sign which represented the number, but it doesn't, and you really shouldn't need it.
it's a little like using [ stringWithFormat:@"%@%@" string1, string2, nil ]
to make a string and then expecting there's a method you can call later which gets you string1 and string2 back, but of course by then you just have the resulting string, you can't go backwards.
There is -(NSDecimal)decimal method which returns a structure with mantissa/exponent etc however the fields in that are explicitly declared to be private, so you really shouldn't use it.
You really need to treat it as a black box if you wish to save and restore it.
On 20-Nov-2009, at 7:43 PM, Tom Bernard wrote:
> Hello Olivier,
>
> I am working with NSDecimals and ran across your 7 year old post in
> Cocoa-dev. Did you ever get an answer to your mantissa question? The
> archives do not show a response to the thread.
>
> Btw, did you consider NSData's
>
> +dataWithBytes:length:
>
> method?
>
> NSData *anNSDecimalAsData = [NSData dataWithBytes:&anNSDecimal
> length:sizeof(NSDecimal)];
>
> gives you an NSData object suitable for an NSDictionary without having to
> muck around with NSDecimal's private fields.
>
>
>
> ++ Tom
>
> Tom Bernard
> email@hidden
>
>
>
>
>> --__--__--
>>
>> Message: 11
>> Date: Tue, 29 Oct 2002 12:37:35 -0600
>> Subject: extracting the mantissa for a NSDecimal
>> From: Olivier <...>
>> To: cocoa apple <...>
>>
>> i'm trying to save an NSDecimal in a dictionary.
>>
>> I study the NSDecimal structure and decided that all i really need to
>> save are:
>> _exponent, _isNegative and _mantissa field
>>
>> i'm trying to get the mantissa field, i want to store it as a NSNumber
>> in my dictionary.
>>
>> the length field of the NSDecimal tells how many short of the mantissa
>> are relevant
>>
>> so i'm building my data this way:
>>
>> NSMutableData *theNumberData = [NSMutableData
>> dataWithLength:16];
>> for (i = 0; i < valueOfObject._length; i++)
>> {
>> [theNumberData replaceBytesInRange: NSMakeRange(16 -
>> (i+1) * 2, 2)
>> withBytes:
>> &valueOfObject._mantissa[i]];
>>
>> }
>>
>> so that the relevant field are put in the data object starting from the
>> end of the object (most significant bytes first)
>>
>> then start the problem, converting it to an NSNumber i tried:
>>
>> const char *theNumberPtr = [theNumberData bytes];
>> [NSNumber numberWithUnsignedLongLong: *theNumberPtr]
>> [NSNumber numberWithUnsignedLongLong: theNumberPtr[0]]
>> [NSNumber numberWithUnsignedLongLong: &theNumberPtr]
>>
>> without any success.
>>
>> Any idea of how to get that mantissa in a NSNumber?
>>
>> Olivier
>>
>> --__--__--
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden