【问题标题】:Storing float in NSNumber gives weird results在 NSNumber 中存储浮点数会产生奇怪的结果
【发布时间】:2015-02-07 21:38:29
【问题描述】:

我在尝试将浮点值存储到 NSNumber 时遇到奇怪的结果。它似乎没有正确存储(或正确打印)。我觉得这是一个愚蠢的错误,但我不知道我做错了什么。这是我的代码:

team.nExpectedScore = [NSNumber numberWithFloat:estimatedScoreSlider.value];
NSLog(@"%f", estimatedScoreSlider.value);
NSLog(@"%f", [team.nExpectedScore floatValue]);

其中nExpectedScoreteam 类的综合属性,声明如下:

@property (strong, nonatomic) NSNumber *nExpectedScore;

虽然我觉得没关系,但是数字是在teaminit方法中初始化的(肯定是调用的):

nExpectedScore = [[NSNumber alloc] init];

另外,estimatedScoreSlider 是一个UISlider,范围从 0 到 500。 有了这一切,两个NSLog 语句将打印以下内容并带有随机滑块位置:

2015-02-07 15:32:43.442 APP_NAME[3013:126937] 213.474030
2015-02-07 15:32:43.442 APP_NAME[3013:126937] 0.000000

我希望这两个数字相同。为什么它们不同?

【问题讨论】:

  • 某处,您似乎正在重新初始化您的 xExpectedScore 变量,这导致它显示为 0。如果您以后要成为这样的东西,则不需要初始化 NSNumber 变量“ [NSNumber numberWithFloat:estimatedScoreSlider.value]" 因为它返回一个 NSNumber 的实例,它为您初始化该 var 而无需调用 alloc init 方法。尝试删除该 var 的这些语句并报告。
  • NSLog(@"%@", 团队);我敢打赌,它是空的。

标签: objective-c xcode floating-point type-conversion nsnumber


【解决方案1】:

团队呢?通过看到 0.00 是 nil NSNumber 的浮点值,您的团队对象似乎未初始化,因为您正在经历 NSNumber 的 nil 行为?

你需要先运行:

self.team = [[WhateverObject alloc]init];

然后你可以给它的属性赋值,例如:

 team.nExpectedScore = [NSNumber numberWithFloat:estimatedScoreSlider.value];

【讨论】:

  • 谢谢,就是这样。我不小心让 team 引用了一个 nil 对象
猜你喜欢
  • 2014-12-01
  • 1970-01-01
  • 2011-07-12
  • 2013-04-27
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多