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


87

我有一个双精度值,即22.368511,我想将其四舍五入到小数点后两位。即它应该返回22.37

我怎样才能做到这一点?


1
您要返回2个小数位的值吗?或显示2位小数的值?
thelaws

实际上,我只需要显示它
testndtv 2011年

Answers:


189

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

%.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]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34
2010-08-22 15:04:10.616 a.out[6954:903] 25.3
2010-08-22 15:04:10.617 a.out[6954:903] 25

13
在iOS上,我必须使用setPositiveFormat:,因为setFormat:方法不存在(仅为Mac定义),但仍然-很好的答案,节省了我很多时间的实验,因此+1并非常感谢您:)
FurloSK 2012年

1
一个问题:不是圆,而是被截断。大概,使用发问者提供的输入值和您的代码,结果将不会是他的预期(22.37)而是(22.36)。
詹姆斯·布什

但是您不能将其用于进一步的计算
Parag Bafna

70

您可以使用以下代码将其格式化为两位小数

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

斯威夫特4:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)

2
迅速4:让str = String(描述:formatter.string(来自:12.2345)!)
yehyatt

结果22.36的值可能不增加6到7?
Shahbaz Akram

@ShahbazAkram是的。该则roundingMode有许多其他的选择,以及如NSNumberFormatterRoundDown,NSNumberFormatterRoundHalfDown等
阿卜杜勒-拉赫曼·阿里Mubeen

30
 value = (round(value*100)) / 100.0;

5
我认为这是最正确的答案-他要求将其四舍五入-不要在末尾将其转换为字符串(或将其转换为双精度,然后再转换为双精度)。
Martin Kovachev




6

要从双精度数中删除小数,请查看此输出

对象C

double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);

输出将是:

10.02 
10

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))

输出将是:

3.14 
3

4

我本来打算用Jason的答案,但是我注意到在我的Xcode版本(4.3.3)中,我无法做到这一点。因此,经过一番研究,我发现他们最近更改了类方法,并删除了所有旧方法。所以这是我必须做的:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);

2

使用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;
}

2

对于Swift,有一个简单的解决方案,如果您不能导入Foundation,使用round()和/或不希望使用String(通常在Playground中就是这种情况):

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

结果:31.726



0

您可以这样做:

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.