我有一系列浮点数,通过一系列乘法计算得出。该数组中的一个数字已经超过了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字符串,以便我可以将其更改为用户友好的字符串?
答案 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;
}