原代码
Class cls = NSClassFromString(className); if ([cls isSubclassOfClass:[NSNumber class]]) { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; returnObject = [numberFormatter numberFromString:obj]; }
此时的NSNumber对应的值是整数 ,1234、10、23、1 等都解析正常
但是如果此时 NSNumber 对应的值是小数,例如经纬度 12.111111 、31.222222、1.203 等, 他会解析失败
原因, 系统通用设置,语言和地区 把中国大陆或者中国香港改成了 非中国地区, 导致NSNumber  解析失败
解决方法1. 改成中国大陆或香港
解决办法2 代码修改
if ([cls isSubclassOfClass:[NSNumber class]]) { // NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; // returnObject = [numberFormatter numberFromString:obj]; /** NSNumberFormatter默认配置可能不适合所有数字格式(例如,它可能期望特定的小数点分隔符或区域设置)。 配置 NSNumberFormatter(如设置 locale 或 decimalSeparator)会增加复杂性,而 [NSString doubleValue] 更直接且足以处理你的用例。 */ // 改进 NSNumber 的处理逻辑 if ([obj isKindOfClass:[NSString class]]) { // 将字符串转换为 float,然后包装为 NSNumber float floatValue = [obj floatValue]; returnObject = @(floatValue); // 或 [NSNumber numberWithDouble:doubleValue] } else if ([obj isKindOfClass:[NSNumber class]]) { returnObject = obj; // 如果已经是 NSNumber,直接使用 } else { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; returnObject = [numberFormatter numberFromString:obj]; } }
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号