2013-05-10 62 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

相關問題