将'NSDecimalNumber'转换为'SInt64',而不丢失精度。(在SInt64、iOS范围内)
当前,使用字符串创建的将'NSDecimalNumber'转换为'SInt64',而不丢失精度。(在SInt64、iOS范围内),ios,precision,numeric,Ios,Precision,Numeric,当前,使用字符串创建的[NSDecimalNumber longLongValue]返回100000000000000 这意味着该类首先将其值转换为double,然后重新转换为SInt64(带符号的long) 如何避免这种行为?我想得到SInt64范围内的精确整数 附言。 我考虑过用NSScanner或strtoll转换成NSString并重新转换成SInt64,但我相信有更好的方法。但是,如果您确定没有其他方法,请告诉我。首先:除非您确定它对性能至关重要,否则我会将其写入字符串并扫描回来。这是
[NSDecimalNumber longLongValue]
返回100000000000000
这意味着该类首先将其值转换为double
,然后重新转换为SInt64
(带符号的long
)
如何避免这种行为?我想得到SInt64
范围内的精确整数
附言。
我考虑过用
NSScanner
或strtoll
转换成NSString
并重新转换成SInt64
,但我相信有更好的方法。但是,如果您确定没有其他方法,请告诉我。首先:除非您确定它对性能至关重要,否则我会将其写入字符串并扫描回来。这是最简单的方法
现在,如果你真的不想这样做:
NSDecimalNumber
long
值(可能引入检查来处理过大的尾数)从NSDecimalNumber*原始值开始 设int64_t近似值=[originalValue LongValue]。这并不确切,但非常接近 将近似值转换为NSDecimalNumber,计算原始值-近似值,取longLongValue,然后加上近似值。现在您得到了正确的结果 谢谢你的回答#2似乎比1快。然而,#1是您提到的更好的方式:)