原代码

 

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];
            }
        }

 

posted on 2025-06-16 17:15  懂事长qingzZ  阅读(8)  评论(0)    收藏  举报