当前,使用字符串[NSDecimalNumber longLongValue]
创建的@"9999999999999999"
返回10000000000000000
。
这意味着该类首先将其值转换为double
,然后重新转换为SInt64
(signed long long
)
如何逃避这种行为?我想获得SInt64
范围内的精确整数。
PS。
我考虑过转换为NSString
并使用SInt64
或NSScanner
重新转换为strtoll
的方法,但是我相信有更好的方法。但是,如果您确定没有其他方法,请告诉我。
最佳答案
首先:除非您确定它对性能至关重要,否则我将其写入字符串中并扫描回去。那是简单的方法。
现在,如果您真的想这样做,请执行以下操作:
从您的NSDecimal
获取一个NSDecimalNumber
使用结构的私有字段,从尾数初始化您的long long
值(可能引入检查以处理太大的尾数)
乘以10 ^指数;您可以使用binary exponentiation来完成;再次,检查是否溢出
关于ios - 将NSDecimalNumber`转换为SInt64,而不会造成精度损失。 (在SInt64,iOS范围内),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4083595/