我接受NSString为
NSString *value = [valuelist objectAtIndex:valuerow];
NSString *value2 = [valuelist2 objectAtIndex:valuerow2];
来自UIPickerView的。 我想
double *cal = value + (value2 * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%@",cal];
在我对它进行计算后,我应该能够在消息中获取字符串..请帮忙 我的程序崩溃了
答案 0 :(得分:35)
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];
答案 1 :(得分:3)
你不应该一直在双打和字符串之间进行转换,因为它往往会失去准确性(一般来说,如果你不想失去准确性,你必须非常小心)。
例如,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”得到了正确的答案。我认为“%。17g”已足够,只要双倍是IEEE 754 64位双打并且库工作正常,但不能保证。
在一天结束时,无法保证[[NSString stringWithFormat:@"%.17g",n] doubleValue] == n
。
答案 2 :(得分:1)
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; NSString *message =[[NSString alloc] initWithFormat:@"%g",cal]; // do work with message [message release];
答案 3 :(得分:1)
发布一个新的答案,因为接受的答案只有string => double:
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];
要使用double =>字符串,请使用
double cost = [string doubleValue];