2011-02-13 62 views
80

我有一個雙倍數值作爲22.368511 我想將它舍入到小數點後兩位。即它應該返回22.37圓形雙倍數值到2位小數

我該怎麼做?

+1

你想返回與2位小數價值?或者顯示2位小數的值? – thelaws 2011-02-13 17:48:31

+0

其實我只是需要顯示它 – testndtv 2011-02-13 17:55:39

回答

177

在大多數語言格式是

%.2f 

你可以看到更多的例子here


編輯:如果你的關心點的顯示我也有這個在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-10-16 22:16:42

+1

一個問題:是不圓的,但截斷。據推測,使用提問者提供的輸入值和你的代碼,結果不會是他所期望的(22.37)-rather(22.36)。 – 2016-11-08 06:48:18

+0

但是你不能用它進行進一步的計算 – 2017-04-03 15:00:33

13
[label setText:@"Value: %.2f", myNumber]; 
61

您可以使用下面的代碼,它格式化到小數點後兩位

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

我打算帶着傑森的回答,但我注意到在我的Xcode版本(4.3.3)中,我無法做到這一點。所以經過一些研究後,我發現他們最近改變了班級方法,並刪除了所有舊班級的方法。所以這裏就是我不得不這樣做:

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

[fmt setMaximumFractionDigits:2]; 
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]); 
23
value = (round(value*100))/100.0; 
2

使用的NSNumber * aNumber的= [NSNumber的numberWithDouble:號碼]。而不是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; 
} 
5

要從雙刪除小數,看看這個輸出

的OBJÇ

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

輸出將是:

10.02 
10 

斯威夫特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 
9

在夫特2.0和7的Xcode。2:

let pi:Double = 3.14159265358979 
String(format:"%.2f", pi) 

例子:

enter image description here

0

你可以這樣做:

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

// test 
NSNumber* a = @12; 
NSString* s = [f stringFromNumber:a]; 
NSLog(@"%@", s); 
2

對於斯威夫特有一個簡單的解決方案,如果你不能既進口基金會,用途round()和/或不想要一個String(通常是在Playground中的情況):

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

結果:31.726