2013-07-23 183 views
0

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

为了做到这一点,我也做了以下内容:把我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出

+4

float/CGFloat值没有“格式”。它是一个纯数字值,任何“格式”都是通过显示它来施加的。 –

回答

14

要转换NSStringCGFloat你可以使用floatValue

CGFloat *eX1rounded = [eX1F floatValue]; 

但是你可以轮到上,无需使用数字格式化, 例如至eX1rounded

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

在任何情况下,你应该记住,像0.1数字不能表示 恰好为二进制浮点数。

+0

我试过这个,但最终我仍然以额外的0结束。查看更新后的问题@MartinR – vzm

+0

@vzm:查看Hot Licks的评论:float没有“格式”。 –

1

使用stringWithFormat:圆和转换为字符串用于显示目的:

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

你可以做同样的事情在的NSLog,该%0.2F说,你想保留2位小数。

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