如何从NSString获得CGFloat?

时间:2013-07-23 16:03:03

标签: objective-c math

在我目前的应用程序中,我有一个通常可以解决相当长的十进制数的等式,即:0.12345或.123。但是我需要这个工作的方式是只显示1或2个十进制数,所以根据我提到的值,它基本上会产生0.12或0.1。

为了做到这一点,我做了以下几点:把我的CGFloat带到NSString:

CGFloat eX1 = 0.12345
NSLog(@" eX1 = %f", eX1);  //This of course , prints out 0.12345

NSNumberFormatter *XFormatter = [[NSNumberFormatter alloc] init];
Xformatter.numberStyle=NSNumberFormatterDecimalStyle;
Xformatter.maximumFractionDigits=1;


NSString *eX1F = [formatter stringFromNumber:@(eX1)]; 
NSLog (@"eX1F = %@",eX1F);  //This prints out 0.1

但我的问题是我需要在格式化之后继续使用它作为CGFloat,我已经尝试通过执行:numberFromString将字符串带回一个数字,但问题是只能使用NSNumber

我可以采取哪些措施来格式化CGFloat并继续使用CGFloat而不是NSStringNSNumber

更新我试过了:

float backToFloat = [myNumber floatValue];

但结果是数字未格式化:0.10000我需要那些额外的0

2 个答案:

答案 0 :(得分:14)

要将NSString转换为CGFloat,您可以使用floatValue

CGFloat *eX1rounded = [eX1F floatValue];

但是您可以直接将eX1舍入到eX1rounded,而无需使用数字格式化程序, 例如:

CFGloat *eX1rounded = roundf(eX1F * 10.0f)/10.0f;

无论如何,您应该记住,0.1之类的数字无法表示 正如二进制浮点数一样。

答案 1 :(得分:1)

使用stringWithFormat:舍入并转换为字符串以供显示:

NSString* str = [NSString stringWithFormat:@"%0.2f", eX1];

您可以在NSLog中执行相同的操作,%0.2f 表示您需要2个小数位。

NSLog(@" eX1 =%0.2f", eX1);   // this prints "0.12"