xar*_*rly 5 nsnumber afnetworking-2 afnetworking-3 ios10 ios11
我想发送一个仅用两个小数位浮点数创建的NSNumber。
所以我要创建一个带有2个小数位数的NSNumberFormatter,但是它不尊重小数位数的数量。
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.maximumFractionDigits = 2;
formatter.roundingMode = NSNumberFormatterRoundUp;
NSString *preformatedPreAuthPrice = [formatter stringFromNumber:@(4.44)];
self.PreAuthPrice=[formatter numberFromString:preformatedPreAuthPrice];
Run Code Online (Sandbox Code Playgroud)
当我打印NSNumber的类型时,它是一个两倍
p strcmp([(NSNumber *)[dictionary objectForKey:@"PreAuthPrice"] objCType], @encode(double))
(int) $1 = 0
Run Code Online (Sandbox Code Playgroud)
如果我得到了价值:
po [self.PreAuthPrice doubleValue]
4.4400000000000004
Run Code Online (Sandbox Code Playgroud)
即使我这样做:
po [@(4.44) doubleValue]
4.4400000000000004
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我在iOS 10上发送此NSNumber(使用AFNetworking版本2.6,3和3.1.0)时,它发送了正确的值4.44。但是在iOS 11上它会发送4.4400000000000004
这是查尔斯捕获的:
iOS 10
{
"preAuthPrice": 4.44,
}
Run Code Online (Sandbox Code Playgroud)
iOS 11
{
"preAuthPrice": 4.4400000000000004
}
Run Code Online (Sandbox Code Playgroud)
我也在基础库的发行说明中找到了这一点:
NS编号
迅速将NSNumber桥接到数字类型现在统一限制了as的情况?无论NSNumber是如何创建的,都进行转换。如果不能将数字安全地表示为目标类型,则将NSNumbers转换为数字类型将返回nil。
这发生在任何人身上吗?可能与发行说明有关吗?在iOS 10中发送[self.PreAuthPrice stringValue],在iOS 11中发送[self.PreAuthPrice doubleValue]
我知道一个解决方案是将值作为字符串发送,并且在阅读后也知道:
和
我知道这可能是问题所在,但是为什么要使用iOS 10。
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |