我有一个 NSString *,例如以下数字 @"182316110006010135232100",我需要用这个完整的值进行计算。我在 iOS SDK 上尝试了多种类型的数字系统,例如 Int、Float 等。但由于位数的原因,当我将 StringValue 更改为 IntValue 时,它会更改数字。
我需要用这个完整的值做以下总和:mod(digit, 97);
据我所知,我已经检查过 Objective-C Long Long 中最长的数字类型:
long long digit = [(NSString *)shouldBechecksum longLongValue];
并且需要做如下计算:
mod(digit, 97);
现在我得到奇怪的结果,因为它用最大版本的数字求和。我需要它来做这个总和:
mod(182316110006010135232100, 97);
我怎样才能正确地进行这个计算?
谢谢!
Best Answer-推荐答案 strong>
您可以使用 NSDecimalNumber 类来获得高达 38 位的精度。要获取 mod,只需将此公式与文档中解释的相应 NSDecimalNumber 方法一起使用。
Mod = digit - int(digit/97)
这是因为 NSDecimalNumber 只能做基本的操作,你必须像我们在学校一样获得 mod。
来自 Apple 文档:
NSDecimalNumber 是 NSNumber 的不可变子类,它提供了一个面向对象的包装器,用于进行 base-10 算术运算。一个实例可以表示任何可以表示为尾数 x 10^exponent 的数字,其中尾数是最多 38 位长度的十进制整数,指数是从 –128 到 127 的整数。
关于iOS:计算长数除法的余数,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/18558650/
|