当前,使用字符串[NSDecimalNumber longLongValue]创建的@"9999999999999999"返回10000000000000000

这意味着该类首先将其值转换为double,然后重新转换为SInt64signed long long

如何逃避这种行为?我想获得SInt64范围内的精确整数。

PS。
我考虑过转换为NSString并使用SInt64NSScanner重新转换为strtoll的方法,但是我相信有更好的方法。但是,如果您确定没有其他方法,请告诉我。

最佳答案

首先:除非您确定它对性能至关重要,否则我将其写入字符串中并扫描回去。那是简单的方法。

现在,如果您真的想这样做,请执行以下操作:


从您的NSDecimal获取一个NSDecimalNumber
使用结构的私有字段,从尾数初始化您的long long值(可能引入检查以处理太大的尾数)
乘以10 ^指数;您可以使用binary exponentiation来完成;再次,检查是否溢出

关于ios - 将NSDecimalNumber`转换为SInt64,而不会造成精度损失。 (在SInt64,iOS范围内),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4083595/

10-11 14:12