Iphone 将双精度值四舍五入到小数点后2位
我有一个双倍值22.368511 我想把它四舍五入到小数点后两位。i、 e.它应该返回22.37Iphone 将双精度值四舍五入到小数点后2位,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我有一个双倍值22.368511 我想把它四舍五入到小数点后两位。i、 e.它应该返回22.37 我如何才能做到这一点?与大多数语言一样,格式是 %.2f 你可以看到更多的例子 编辑:如果您关心25.00的情况下点的显示,我也得到了这一点 { NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setPositiveFormat:@"0.##"]; NSLog(@"%@", [fmt stri
我如何才能做到这一点?与大多数语言一样,格式是
%.2f
你可以看到更多的例子
编辑:如果您关心25.00的情况下点的显示,我也得到了这一点
{
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.##"];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
您可以使用函数您可以使用下面的代码将其格式设置为小数点后两位
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];
NSLog(@"Result...%@",numberString);//Result 22.37
Swift 4:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up
let str = String(describing: formatter.string(from: 12.2345)!)
print(str)
我本来打算同意Jason的回答,但我注意到在我的Xcode版本(4.3.3)中,我无法做到这一点。因此,经过一点研究,我发现他们最近改变了类方法,并删除了所有旧的方法。所以我必须这样做:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
使用NSNumber*aNumber=[NSNumber numberWithDouble:number];而不是NSNumber*aNumber=[NSNumber numberWithFloat:number]
+(NSString *)roundToNearestValue:(double)number
{
NSNumber *aNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setUsesGroupingSeparator:NO];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:0];
NSString *string = [numberFormatter stringFromNumber:aNumber];
return string;
}
要删除double中的小数,请查看此输出 Obj C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
输出将是:
10.02
10
3.14
3
Swift 2.1和Xcode 7.2.1
let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))
输出将是:
10.02
10
3.14
3
在Swift 2.0和Xcode 7.2中:
let pi:Double = 3.14159265358979
String(format:"%.2f", pi)
例如:
您可以这样做:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
SWIFT有一个简单的解决方案,如果你不能导入基础,使用循环()和/或不想要字符串(通常情况下,当你在操场上):
结果:31.726我使用扩展类型Double发布的解决方案:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
是否要返回带2位小数的值?或者用小数点后两位显示值?实际上我只需要显示它,如果您对值进行四舍五入(我起初也认为这是个问题),这很有用,但是注释显示hmthur仅用于控制显示…在iOS上,我必须使用
setPositiveFormat:
,因为setFormat:
方法不存在(定义仅适用于Mac),但仍然-很好的答案,为我节省了数小时的实验时间,所以+1,非常感谢你:)一个问题:不是圆形,而是截断。据推测,使用提问者提供的输入值和你的代码,结果可能不是他期望的(22.37),而是(22.36)。但你不能用它进行进一步计算。我相信这是最正确的答案——他要求只对其进行四舍五入,而不是在最后将其转换为字符串(或者在swift 4:let str=String(描述:formatter.String(from:12.2345)!)中,22.36的结果值是否可能不增加6到7?@ShahbazAkram是的。舍入模式还有许多其他选项,例如NSNumberFormatterRoundDown、NSNumberFormatterRoundHalfDown等。
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}