存储十进制数字

问题描述:

我需要存储一个十进制数字,并且字符串,整数或数字都无法做我想要的。我无法使用NSNumber,因为我需要稍后才能更改它。存储十进制数字

我搜索了整个互联网,但我似乎无法找到它。

答案可能很简单。

谢谢!

UPDATE:

一些种类的数据在这里

循环代码{

的NSLog(保存号);

保存编号3.1415926535;

删除已储存

//现在字符串不存在了 }

我需要能够保存外循环,这个数字在“某些类型的数据在这里”所有数据因为当循环开始时,从循环创建的所有内容都将被删除。

+1

表情符号不符合*s质量标准? – Deni 2013-04-30 21:21:06

+0

难道你不能只用一个双? – PurpleAlien 2013-04-30 21:24:37

+2

你是什么意思“商店”呢?请澄清你的问题,并提供一些代码,以更好地解释你想要做的事情。 'NSNumber'有一堆方便的方法来存储和检索整数,双精度,布尔等等。事实上'NSNumber'是存储这些类型的首选方法。 – Aaron 2013-04-30 21:24:47

只需使用一个double。当谈到时间来存放它,你可以得到一些这样的:

NSNumber *number = @(myDouble); 

要改变一个NSNumber成双,

double myDouble = [number doubleValue]; 
+0

不完全是我想要的,但我明白了;-) – Deni 2013-05-10 07:41:37

尝试使用NSNumber像这样:

double myValue = 20.0; 

NSNumber* number = [NSNumber numberWithDouble:myValue]; 

// Do something with NSNumber like write it to disk, put it in an array, dictionary whatever .... 

// Then pull it back out 
double myOldValue = [number doubleValue]; 

拉双重价值在应用软件关闭后(我解释这意味着“中背景”或“暂停”),试图将其写入NSUserDefaults之前应用程序是背景,然后将其拉回应用程序恢复时。

// Write a double to NSUserDefaults 
[[NSUserDefaults standardUserDefaults] setDouble:myValue forKey:@"myDoubleValue"]; 

// Write an NSNumber to NSUserDefaults 
[[NSUserDefaults standardUserDefaults] setObject:number forKey:@"myNumberWithDoubleValue"]; 

// Extract double from NSUserDefaults 
double myReallyOldDoubleValue = [[NSUserDefaults standardUserDefaults] doubleForKey:@"myDoubleValue"]; 

// Extract NSNumber from NSUserDefaults 
NSNumber* myReallyOldNumberValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myNumberWithDoubleValue"]; 

或者在你的伪代码:

NSNumber *someValue = [NSNumber numberWithDouble:0.0]; 

some kind of data here 
looping code { 

    nslog(save number) 

    someValue = [NSNumber numberWithDouble:3.1412]; 

    delete all data that has been stored 
} 

存放指向你的电话号码或instance variable或类property

+0

好的,有无论如何我可以改变双重价值。像:myValue = 36.3 – Deni 2013-04-30 21:33:17

+0

你什么时候改变这个值?要更改'NSNumber',您只需创建一个新的NSNumber。它是不可变的。我不完全明白你想要做什么。如果你想将它存储在一个数组中,你应该使用'NSNumber',否则一般数据类型应该适合你,我想。 – Aaron 2013-04-30 21:37:33

+0

查看我的更新。我不能只创建一个新的,因为当循环开始时,所有东西都被删除。 – Deni 2013-04-30 21:49:55

可以使用NSNumber,或者是十进制的子类NSDecimalNumber 。仅仅因为对象本身是不可变的并不意味着你不能改变给定变量指向的值。例如:

NSDecimalNumber *a = [NSDecimalNumber numberWithInt:2]; 
a = [a decimalNumberByAdding:[NSDecimalNumber numberWithInt:12]]; 
a = [a decimalNumberByDividing:[NSDecimalNumber numberWithDouble:2.3]]; 

这就像真正的int,它也是不可变的。

double a = 2; 
a = a + 12; 
a = a/2.3; 

话虽这么说,NSDecimalNumber相当冗长。如果你可以逃避一个原始类型(比如说,以美分而不是美元计算),那么这可能是更可取的。

+0

这看起来不错。我会测试它是否在我的代码中工作,我会让你知道:-) – Deni 2013-04-30 21:52:30