2012-11-21 137 views
-2

我想將一個浮點值舍入到小數點後兩位。我使用的Objective-C四捨五入浮點數最多兩位小數

e.g 1.47567應該是這樣的,1.47 ..請幫助

日Thnx。

+1

那不是 「四捨五入」,這是截斷。由於第三位數字是'5',舍入將是1.48。你想要做什麼? – dasblinkenlight

+0

見http://stackoverflow.com/questions/560517/make-a-float-only-show-two-decimal-places – Cfr

+0

http://stackoverflow.com/questions/752817/rounding-numbers-in-objective- c重複? – hd1

回答

2
float num = 1.47567; 
    num *= 100; 
    if(num >= 0) num += 0.5; else num -= 0.5; 
    long round = num; 
    num = round; 
    num /= 100; 
    NSLog(@"%.2f",num); 
+0

我不必重新格式化它,我希望如果在四捨五入之後我寫了NSLog(@「%f」,num);那麼我應該得到1.47。 。 – Waqas

+0

但我喜歡你算法..好..謝謝.. – Waqas

0
NSLog(@"%.2f", 1.47567); 

會舍入小數點後兩位。如果你想「切」,有不同的選擇。例如:

NSLog(@"%.2f", floor(1.47567 * 100)/100); 
+0

我不打印價值。但我必須使用它。 所有我想要的是,我的變量應該包含像1.45。 。 – Waqas

0
double value = 1.47567; 
double roundedValue = round(value * 100.0)/100.0; 

當然你也可以代替100.0使用命名常量。這只是一個演示。

+0

通過應用NSLog(@「Rounded value is:%f」,roundedValue); 它打印1.480000 ..但我想這個四捨五入的值應該有1.47或讓說1.48。 – Waqas

+0

在評論@ jimpic的答案你說你不想打印它,但要使用它。所以,當你使用它時,你認爲1.48和1.480000之間的差異是什麼? – Davyd

1
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 

NSString *formattedNumber = [formatter stringFromNumber:@(self.speed)]; 
+0

我總是使用NSNumberFormatter,因爲這種方式更容易重用格式。使用NSNumberFormatterRoundDown來避免舍入。 也有幫助:http://stackoverflow.com/questions/15264109/how-to-avoid-rounding-off-in-nsnumberformatter –

0

做這個

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 

NSString *formattedNumber = [formatter stringFromNumber:@(self.speed)]; 

float numTwoDecimalDigits = atof([formattedNumber UTF8String]);