2013-05-10 55 views
16

我有以下double值:0.000900137869045636 我想将其转换为NSStringObjective-C:将整个double值转换为字符串而不丢失数据

我尝试下面的代码,但不管如何,便将价值这样的:0.000900138

[NSString stringWithFormat:@"%.20lf", [currentLocation coordinate].latitude]; 

我应该怎么做,以保持双号,因为它是什么?

谢谢。

+1

你如何检查结果字符串的值? – 2013-05-10 17:56:17

+4

它不会为我截断,你确定你的double包含那个值吗? – dreamlax 2013-05-10 17:57:04

+1

请注意,运行上述语句不会以某种方式修改“纬度”,以便稍后以更宽的格式打印。你需要使用'stringWithFormat'调用的输出。 – 2013-05-10 18:00:04

回答

36

使用

NSNumber *myDoubleNumber = [NSNumber numberWithDouble:myDouble];

创建一个NSNumber然后调用

[myDoubleNumber stringValue];

+1

+1即使我更喜欢* @(myDouble)*而不是* [NSNumber numberWithDouble:myDouble] *。 – 2013-05-10 17:58:18

+3

这依赖于'NSNumber'的内部格式,并不是获得精确定义输出的好方法。 – 2013-05-10 18:01:35

+1

这是行不通的,我得到'0.0009001378784887493' – bazik 2013-05-10 18:13:44

0

似乎没有要与你的代码中的任何问题,因为据我可以看到:我只是想以下和

int main(int argc, const char * argv[]) 
{ 

    double foo = 0.000900137869045636; 
    NSLog([NSString stringWithFormat:@"%.20lf", foo]); 

    return 0; 
} 

日志输出是:

2013-05-10 14:00:18.492 Test[71101:303] 
0.00090013786904563598 

所以不知道你的问题是什么,但它不是在创造NSString的。

1

简答题:使用%.18lf - 使用0.000900137869045633 - > 0.000900137869045639进行测试。但是,不要自欺欺人,这只是因为四舍五入。

+0

因此.18lf和.20lf的数字有所不同吗? – thedp 2013-05-11 20:22:26

+0

@thedp - 首先你有18个小数位数,而不是20位。当你格式化一个小数时,最后一位数被四舍五入。您的十进制数字没有确切的二进制等值,但二进制数字四舍五入为十进制数字匹配时,四舍五入为20它不。双精度浮点数实际上只有15-17位数的小数精度,所以你在这里推动了极限,因此我的评论是这不是确切的 - 你很幸运,你的18位数字是相同的。如果您需要使用这个精度的数字来使用NSDecimalNumber,那么它有高达38位的精度。 – CRD 2013-05-12 03:34:31