Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将双精度值四舍五入到小数点后2位_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 将双精度值四舍五入到小数点后2位

Iphone 将双精度值四舍五入到小数点后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

我有一个双倍值22.368511 我想把它四舍五入到小数点后两位。i、 e.它应该返回22.37


我如何才能做到这一点?

与大多数语言一样,格式是

%.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
    }
}