我正在尝试将NSString
转换为long
,但正在获取垃圾值。下面是我的代码:
long t1 = [[jsonDict valueForKeyPath:@"detail.amount"]doubleValue] * 1000000000000000000;
long t2 = [[jsonDict valueForKeyPath:@"detail.fee"]doubleValue] * 10000000000000000;
NSLog(@"t1: %ld",t1);
NSLog(@"t2: %ld",t2);
detail.amout = 51.74
detail.fee = 2.72
O / P:
t1:9223372036854775807(在此处获取垃圾值)
t2:27200000000000000(工作正常)
提前致谢。
最佳答案
每种数字类型(int,long,double,float)都有限制。对于您的长64位(因为您的设备是64位),上限为:9,223,372,036,854,775,807(请参见此处:https://en.wikipedia.org/wiki/9,223,372,036,854,775,807)
就您而言,51.74 * 1,000,000,000,000,000,000 =
51,740,000,000,000,000,000
而Long 64bit最多只能有
9,223,372,036,854,775,807
因此,溢出发生在9,223,372,036,854,775,808及以上。您的计算结果是哪个。
还需要注意的是,如果您只满足64位远程要求,那么您所做的事情也会引起问题,因为当您的应用程序在32位(例如iPhone 5c或更低版本)上运行时会发生什么?
除非您要进行复杂的数学运算,否则通常不建议使用大数。如果数字精度不是很关键,则应考虑简化数字,例如51,740G(G = Giga)。等等