我正在尝试将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)。等等

10-08 16:58