目前,使用字符串[NSDecimalNumber longLongValue]
创建的@"9999999999999999"
会返回10000000000000000
。
这意味着该类首先将其值转换为double
,然后重新转换为SInt64
(signed long long
)
如何规避这种行为?我希望得到SInt64
范围内的精确整数。
PS。
我考虑转换为NSString
并使用SInt64
或NSScanner
重新转换为strtoll
,但我相信还有更好的方法。但如果你确定没有别的办法,请告诉我。
答案 0 :(得分:0)
首先:除非您确定它的性能至关重要,否则我会将其写入字符串并将其扫描回来。这是简单的方法。
现在,如果你真的想这样做,那么:
NSDecimal
NSDecimalNumber
long long
值(可能会引入检查以处理过大的尾数)答案 1 :(得分:0)
从NSDecimalNumber * originalValue开始。
让int64_t约= [originalValue longLongValue]。这不是确切的,但非常接近。
将大约转换为NSDecimalNumber,计算originalValue - approx,取longLongValue,并添加到约。现在你得到了正确的结果。