将NSString转换为双倍进行计算,然后再返回以在NSString中打印

时间:2010-07-21 12:34:44

标签: iphone nsstring uipickerview nsnumber

我接受NSString为

NSString *value = [valuelist objectAtIndex:valuerow];
NSString *value2 = [valuelist2 objectAtIndex:valuerow2];
来自UIPickerView的

。 我想

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


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

在我对它进行计算后,我应该能够在消息中获取字符串..请帮忙 我的程序崩溃了

4 个答案:

答案 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];