在我目前的应用程序中,我有一个通常可以解决相当长的十进制数的等式,即: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
Run Code Online (Sandbox Code Playgroud)
但我的问题是,我需要继续使用它作为CGFloat格式后,我已经尝试通过执行将字符串带回一个数字:numberFromString但问题是只适用于NSNumber.
我可以做些什么来格式化我CGFloat并继续使用它作为一个CGFloat而不是一个NSString或NSNumber?
更新我试过:
float backToFloat = [myNumber floatValue];
Run Code Online (Sandbox Code Playgroud)
但结果是数字未格式化:0.10000我需要额外的0
Mar*_*n R 14
要转换NSString为a,CGFloat您可以使用floatValue:
CGFloat *eX1rounded = [eX1F floatValue];
Run Code Online (Sandbox Code Playgroud)
但是您可以直接舍eX1入eX1rounded而不使用数字格式化程序,例如:
CFGloat *eX1rounded = roundf(eX1F * 10.0f)/10.0f;
Run Code Online (Sandbox Code Playgroud)
在任何情况下,您都应该记住,数字0.1不能完全表示为二进制浮点数.
| 归档时间: |
|
| 查看次数: |
8770 次 |
| 最近记录: |