Ale*_* N. 6 decimal objective-c long-integer
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]);
Run Code Online (Sandbox Code Playgroud)
两个值都小于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
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我不知道如何解释这种行为.
NSDecimalNumber缺少unsignedLongLongValue方法,因此它继承了默认实现NSNumber.获得价值的唯一方法NSDecimalNumber是获得一个NSDecimal结构,或者一个double.转换错误是在转换NSDecimalNumber为a 的过程中引入的double.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |