我无意中发现了一个奇怪的NSDecimalNumber行为:对一些价值观,调用integerValue,longValue,longLongValue,等,返回意外的值.例:
let v = NSDecimalNumber(string: "9.821426272392280061")
v // evaluates to 9.821426272392278
v.intValue // evaluates to 9
v.integerValue // evaluates to -8
v.longValue // evaluates to -8
v.longLongValue // evaluates to -8
let v2 = NSDecimalNumber(string: "9.821426272392280060")
v2 // evaluates to 9.821426272392278
v2.intValue // evaluates to 9
v2.integerValue // evaluates to 9
v2.longValue // evaluates to 9
v2.longLongValue // evaluates to 9
Run Code Online (Sandbox Code Playgroud)
这是使用XCode 7.3; 我还没有使用早期版本的框架进行测试.
我已经看到了一些关于意外舍入行为的讨论NSDecimalNumber,以及不使用继承的NSNumber初始化器初始化它的警告,但我还没有看到任何有关此特定行为的信息.然而,有一些关于内部表征和四舍五入的相当详细的讨论可能包含我寻求的金块,所以如果我错过它,请提前道歉.
编辑:它已被隐藏在评论中,但我已将此作为问题#25465729提交给Apple.OpenRadar:http …