我在浮点数中有值25.00,但当我在屏幕上打印它时,它是25.0000000。 如何显示只有两位小数点后的值?
当前回答
我根据上面的回答做了一个快速的扩展
extension Float {
func round(decimalPlace:Int)->Float{
let format = NSString(format: "%%.%if", decimalPlace)
let string = NSString(format: format, self)
return Float(atof(string.UTF8String))
}
}
用法:
let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
其他回答
如果你也需要浮动值:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);
所有答案的问题是,乘法和除法会导致精度问题,因为你使用了除法。这是我很久以前在PDP8上编程时学到的。 解决方法是:
return roundf(number * 100) * .01;
因此,15.6578只返回15.66,而不是15.6578999或类似意外的结果。
你想要的精确程度取决于你自己。只是不要除以乘积,要乘以等量的小数。 不需要搞笑的字符串转换。
这不是数字如何存储的问题,而是如何显示它的问题。当将其转换为字符串时,必须四舍五入到所需的精度,在您的示例中是小数点后两位。
例如:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f告诉格式化程序,您将格式化一个浮点数(%f)和,它应该四舍五入到两个位置,并且应该用0填充。
例如:
%f = 25.000000
%.f = 25
%.02f = 25.00
使用NSNumberFormatter和maximumFractionDigits,如下所示:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);
你会得到12.35
你也可以尝试使用NSNumberFormatter:
NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];
你可能还需要设置否定格式,但我认为解决这个问题已经足够聪明了。
推荐文章
- 为什么ARC仍然需要@autoreleasepool ?
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 以编程方式创建segue
- 设置TextView文本从html格式的字符串资源在XML
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令