我有一个值存储为NSDecimalNumber,当我将其转换为双精度值时,它将失去精度。
对于我正在调试的当前数据,该值为0.2676655。当我向其发送doubleValue消息时,得到0.267665。它被截断而不是四舍五入,这对一些使用哈希检测同步操作的数据更改的代码造成了严重破坏。
NSDecimalNumber实例来自第三方框架,因此我不能仅将其替换为原始double。最终,它被插入到NSMutableString中,所以我要使用字符串表示形式,但是它需要通过格式说明符“%.6lf”传递,基本上我需要在小数点后六位,因此它看起来像0.267666。
如何在不损失精度的情况下完成此任务?如果有一种格式化NSDecimalNumber的好方法,而又不转换为可以正常工作的double的话。
最佳答案
NSDecimalNumber实例来自第三方框架,所以我
不能只用原始double替换它。
是的你可以。 NSDecimalNumber是NSNumber的一个不变的子类,在转换时,它有点有用:
double myDub = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:((double)0.2676655)] doubleValue]];
最终,它被插入到NSMutableString中,所以我
字符串表示形式,但是需要通过一种格式进行传递
“%.6lf”的说明符,基本上我需要小数点后六位,所以
它看起来像0.267666。
不幸的是,双精度不能四舍五入,但是得到一个百万分之一的字符串值并不是一件大事(我希望):
NSDecimalNumber *num = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:((double)0.2676655)] decimalValue]];
NSString *numString = [NSString stringWithFormat:@"%.6lf", [num doubleValue]];
NSLog(@"%@",numString);
关于objective-c - 如何将NSDecimalNumber转换为double,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11548615/