gpt4 book ai didi

objective-c - Objective C 奇怪的十进制到 long long 的转换

转载 作者:太空狗 更新时间:2023-10-30 03:44:15 32 4
gpt4 key购买 nike

NSLog(@"%llu\n\n", ULONG_LONG_MAX);

NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946620"];
NSLog(@"%@", decimal);
NSLog(@"%llu\n\n", [decimal unsignedLongLongValue]);

decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946628"];
NSLog(@"%@", decimal);
NSLog(@"%llu", [decimal unsignedLongLongValue]);

两个值都小于 ULONG_LONG_MAX。但是,我们在输出中看到的是:

2012-01-05 17:41:55.879 test[1276:207] 18446744073709551615

2012-01-05 17:41:55.969 test[1276:207] 154550038129946620
2012-01-05 17:41:56.095 test[1276:207] 154550038129946624

2012-01-05 17:41:56.096 test[1276:207] 154550038129946628
2012-01-05 17:41:56.096 test[1276:207] 154550038129946624

我做错了什么?我不知道如何解释这种行为。

最佳答案

NSDecimalNumber 缺少unsignedLongLongValue 方法,因此它继承了NSNumber 的默认实现。获取 NSDecimalNumber 值的唯一方法是获取 NSDecimal 结构或 double。在将 NSDecimalNumber 转换为 double 的过程中引入了转换错误。

关于objective-c - Objective C 奇怪的十进制到 long long 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8743541/

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