0

在我当前的应用程序中,我有一个通常可以求解大量十进制数的方程式,即: 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.

我可以做些什么来格式化 myCGFloat并继续使用它作为 aCGFloat而不是 a NSStringor NSNumber

更新我试过:

float backToFloat = [myNumber floatValue];

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

4

2 回答 2

14

要转换NSStringCGFloat您可以使用floatValue

CGFloat *eX1rounded = [eX1F floatValue];

eX1但是您可以不使用数字格式化程序直接四舍五入eX1rounded,例如:

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

在任何情况下,您都应该记住,像这样的数字0.1不能完全表示为二进制浮点数。

于 2013-07-23T16:33:55.903 回答
1

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

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

你可以在 NSLog 中做同样的事情,%0.2f表示你想要 2 个小数位。

NSLog(@" eX1 =%0.2f", eX1);   // this prints "0.12"
于 2013-07-23T20:22:04.857 回答