如何将字符串转换为 double,反之亦然?

我想把一个字符串转换成一个双精度字符串,在对它做了一些数学运算之后,再把它转换回一个字符串。

如何在 Objective-C 中完成此操作?

有没有办法把一个双精度数舍入到最接近的整数?

278381 次浏览

可以将 NSString 转换为双精度

double myDouble = [myString doubleValue];

四舍五入到最近的整数可以这样做

int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

说实话,我不确定是否有比

NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];

Olliej 的 四舍五入方法对于负数是错误的

  • 2.4四舍五入等于2(olliej 的方法是正确的)
  • -2.4舍入为 -2(olliej 的方法返回 -1)

还有一个办法

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

当然可以使用 math.h 中的舍入函数

添加到 olliej 的答案中,您可以使用 NSNumberstringValue将 int 转换回字符串:

[[NSNumber numberWithInt:myInt] stringValue]

NSNumber上的 stringValue调用 descriptionWithLocale:nil,为您提供本地化的值字符串表示形式。我不确定 [NSString stringWithFormat:@"%d",myInt]是否会给你一个适当本地化的 myInt表示。

要真正正确地从字符串转换为数字,您需要使用为从中读取字符串的语言环境配置的 NSNumberFormatter实例。

不同的语言环境会使数字的格式不同。例如,在世界上的一些地方,COMMA被用作小数点,而在其他地方,它被用作 PERIODーー而数千个分隔符(使用时)是相反的。除非它是个空间。或者根本不存在。

它实际上取决于输入的来源。最安全的做法是为输入的格式化方式配置一个 NSNumberFormatter,并使用 -[NSFormatter numberFromString:]从中获取一个 NSNumber。如果要处理转换错误,可以改用 -[NSFormatter getObjectValue:forString:range:error:]

对于舍入,您可能应该使用 math.h 中定义的 C 函数。

int roundedX = round(x);

按住按钮选项,双击 Xcode 的 round,它会显示给你的手册页面的各种功能,四舍五入不同的类型。

这是我所知道的最简单的方法:

float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;

下面是 NSNumberFormatter 的一个工作示例,它读取本地化数字 String (xCode 3.2.4,osX 10.6) ,以节省其他人我刚刚浪费的时间。注意: 虽然它可以处理尾随空格,如“8,765.4”,但它不能处理前导空格,也不能处理杂乱的文本字符。(错误的输入字符串: “8”和“8q”和“8q”。)

NSString *tempStr = @"8,765.4";
// localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
// next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial


NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'",
tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release];  // good citizen

从这个例子中,您可以看到两种方式的转换:

NSString *str=@"5678901234567890";


long long verylong;
NSRange range;
range.length = 15;
range.location = 0;


[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];


NSLog(@"long long value %lld",verylong);
// Converting String in to Double


double doubleValue = [yourString doubleValue];


// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal


// Converting double to int


int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];

对于从数字到字符串的转换,使用新的文本语法(XCode > = 4.4)怎么样。

int myInt = (int)round( [@"1.6" floatValue] );


NSString* myString = [@(myInt) description];

(将其作为 NSNumber装箱,并使用 NSObjects 的描述方法将其转换为字符串)

我最终使用了这个方便的宏:

#define STRING(value)               [@(value) stringValue]

将文本字段中输入的文本转换为整数

double mydouble=[_myTextfield.text doubleValue];

四舍五入到最近的双人间

mydouble=(round(mydouble));

四舍五入到最接近的 int (仅考虑正值)

int myint=(int)(mydouble);

从 double 转换为 string

myLabel.text=[NSString stringWithFormat:@"%f",mydouble];

或者

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

从 int 转换为 string

myLabel.text=[NSString stringWithFormat:@"%d",myint];

或者

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];