如何获得NSBigMutableString的值

时间:2016-02-25 14:26:42

标签: objective-c macos

我有一系列浮点数,通过一系列乘法计算得出。该数组中的一个数字已经超过了float可以处理的最大数字。当我使用此方法显示NSTextView中的所有数字时:

- (void)updateResultLabel:(NSArray<NSNumber *> *)results {
    NSMutableString *string = [NSMutableString stringWithCapacity:100];
    for (NSNumber *number in results) {
        [string appendFormat:@"%f\n", number.floatValue];
   }
    self.resultLabel.string = string;
}

我得到inf的数字溢出。我想让它显示一个更加用户友好的文本。我尝试在调试器中输入以下命令:

print string

断点位于self.resultLabel.string = string;行时。它给了我这个:

(NSBigMutableString *) $0 = 0x0000618000041ec0 class name = NSBigMutableString

我尝试使用没有用的[string isEqualToString:@"inf"]。你如何检查它是否有inf字符串,以便我可以将其更改为用户友好的字符串?

2 个答案:

答案 0 :(得分:2)

使用INFINITY是一个解决方案。 示例用法是

 float t = 1231231231889989899898232131231232312312.323132123123131231231231231231231321;
    if (t == INFINITY) {
        NSLog(@"inf it is");
    }

math.h中定义为

#define INFINITY    HUGE_VALF

在你的情况下

for (NSNumber *number in results) {
        if(number.floatValue != INFINITY)
            [string appendFormat:@"%f\n", number.floatValue];
        else {
             //set the other text.
        }
   }

答案 1 :(得分:0)

你能尝试在NSValue中使用方法stringValue来减少字符串中的数组吗?

- (void)updateResultLabel:(NSArray<NSNumber *> *)results {
    NSMutableString *string = [NSMutableString stringWithCapacity:100];
    for (NSNumber *number in results) {
        [string appendFormat:@"%@\n", number.stringValue];
   }
    self.resultLabel.string = string;
}