2010-07-21 35 views
12

打印我接受的NSString作爲轉換的NSString加倍計算,然後再回來NSString中

NSString *value = [valuelist objectAtIndex:valuerow]; 
NSString *value2 = [valuelist2 objectAtIndex:valuerow2]; 

從UIPickerView。 我想

double *cal = value + (value2 * 8) + 3; 


NSString *message =[[NSString alloc] initWithFormat:@"%@",cal]; 

我應該能夠得到消息字符串我做它的計算後..請幫助 我的程序崩潰

回答

35
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal]; 
+0

三江源傢伙!有效 ! – 2010-07-21 13:06:20

+1

現在,只是完全主觀 – 2010-07-21 13:26:58

+0

我環顧四周,迄今爲止%f和%g似乎是相同的,根據大多數參考。他們有什麼不同? – jamone 2010-07-21 15:25:30

1
 
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%g",cal]; 

// do work with message 

[message release]; 
2

你不應該」因爲它往往會失去準確性(一般來說,如果你不想失去準確性,你必須非常小心)。

例如,nextafter(1.0,2.0)返回大於1的最小雙倍(正好1.0000000000000002220446049250313080847263336181640625,但我們很滿意1.0000000000000002)。使用「%g」格式化僅返回「1」。

我們希望NSNumber做正確的事情,但[[NSNumber numberWithDouble:nextafter(1,2)] stringValue]也返回「1」。根據文檔,-[NSNumber stringValue]調用[self descriptionWithLocale:nil],其格式爲「%0.16g」。這還不夠。不過,我們通過格式化「%.17g」得到了正確的答案。如果雙打是IEEE 754 64位雙打,並且這些庫運行正常,我認爲「%.17g」就足夠了,但不能保證。

在一天結束時,不保證[[NSString stringWithFormat:@"%.17g",n] doubleValue] == n

+0

謝謝你,但我只需要高達2小數的地方..即:12.50 – 2010-07-23 08:23:53

1

發佈一個新的答案,因爲接受一個不僅串=>雙:

double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal]; 

要進入雙=>字符串,請使用

double cost = [string doubleValue]; 
+0

爲什麼指針?它應該是double cost = [string doubleValue]; – 2014-04-03 09:07:11

+0

好點。在元層面...爲什麼評論?只需編輯帖子? :D – pfrank 2014-04-04 00:11:03

+0

你是對的:-)編輯 – 2014-04-05 11:30:58