1

一段简单的代码可以读取存储的数字,计算存储值的利息,比如 100 美元,利率为 10%。然后我存储新值代替旧值。我正在为此努力:

NSNumber *bankTemp = [[NSNumber alloc] initWithInt:[[NSUserDefaults standardUserDefaults] integerForKey:@"bank"]];  
bankTemp = bankTemp + (bankTemp * .10);
[[NSUserDefaults standardUserDefaults] setInteger:bankTemp forKey:@"bank"];

bankTemp将是 100 美元。我相当肯定我在中线做错了什么。我能做些什么来纠正它?

编辑:这不是家庭作业。我正在开发一个交易游戏应用程序。

编辑:

我现在已经做到了这一点:

        NSNumber *bankTemp = [[NSNumber alloc] initWithInt:[[NSUserDefaults standardUserDefaults] integerForKey:@"bank"]];  
        bankTemp = [bankTemp intValue] * 1.10;
        [[NSUserDefaults standardUserDefaults] setInteger:[bankTemp intValue] forKey:@"bank"];

编辑:

为了处理美分,我……省略了它们!

游戏不需要它们,所以它们不值得麻烦。它是整数。

我很想知道人们有什么解决方案来处理美分,所以请继续发表你对美分的想法。

4

3 回答 3

3

你不想要一个 NSNumber。NSNumber 是一个包含原始数字类型的类,因此您可以将它们与例如 Cocoa 集合一起使用。如果你想做数学,你应该只使用原语。做就是了:

NSInteger bankTemp = [[NSUserDefaults standardUserDefaults] integerForKey:@"bank"];  
bankTemp = bankTemp + bankTemp * 0.10;
[[NSUserDefaults standardUserDefaults] setInteger:bankTemp forKey:@"bank"];

对于存钱,您需要考虑如何对待美分。使用浮点数很诱人,因此您实际上可以拥有 5.25 美元,但浮点数不精确并且在比较相等等时会导致各种问题,因此通常最好将您的货币存储为尽可能最小单位的整数并除以获得更大的面额。因此,如果您要存储美元和美分,请将 100.00 美元表示为 10000。

于 2010-06-25T02:56:46.810 回答
1

编辑:从头开始,你不能用 NSInteger 做乘法运算。

作为一个抽象,要让一个值增加 10%,你可以做 Value * 1.10 如果你只是想知道一个值的 10% 是什么,做 value * 0.10

如果您正在考虑进行每月计算或一段时间内的利息,则需要使用其中一个公式。

于 2010-06-25T02:53:42.053 回答
1

最重要的问题是您不能以这种方式乘以 NSNumber。NSNumber 是一个实例,而不是标量类型。坚持乘以实数,如浮点数或整数。

(我建议浮动。)

于 2010-06-25T02:56:02.647 回答