gpt4 book ai didi

objective-c - 为什么 [NSDecimalNumber longLongValue] 返回最小值

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:18 24 4
gpt4 key购买 nike

NSDecimalNumber *dn = [[[NSDecimalNumber alloc] initWithString:@"9223372036854775806"] autorelease];
long long llVal = [dn longLongValue];

为什么 llVal 是 -9223372036854775808 ?

NSDecimalNumber 扩展了 NSNumber 所以它应该处理 long long 类型。不是吗?

最佳答案

我相信您在 -longLong 中遇到了一个小的 base10->base2 舍入错误。我会在 bugreport.apple.com 上打开一个缺陷。您应该能够在很长的范围内往返一个数字。

如果您完全使用 NSDecimalNumber,您会注意到它不会出现舍入错误。这是一些我认为非常清楚地显示了问题的代码:

unsigned long long longlong = 9223372036854775806;
NSLog(@"longlong: %lu", longlong);
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithMantissa:longlong exponent:0 isNegative:NO];
NSLog(@"dn-dn: %@", dn); // Round-trips fine
NSLog(@"dn+10: %@", [dn decimalNumberByAdding:[NSDecimalNumber decimalNumberWithString:@"10"]]); // Even does math
NSLog(@"dn-lu: %lu", [dn unsignedLongValue]); // has rounding error

2011-03-07 23:56:15.132 Untitled[16059:a0f] longlong: 9223372036854775806
2011-03-07 23:56:15.135 Untitled[16059:a0f] dn-dn: 9223372036854775806
2011-03-07 23:56:15.135 Untitled[16059:a0f] dn+10: 9223372036854775816
2011-03-07 23:56:15.136 Untitled[16059:a0f] dn-lu: 9223372036854775808

关于objective-c - 为什么 [NSDecimalNumber longLongValue] 返回最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com