2009-04-15 41 views
71

Tôi đang cố thực hiện một số số làm tròn và chuyển đổi thành chuỗi để nâng cao đầu ra trong chương trình Mục tiêu-C.Làm tròn số trong Mục tiêu-C

Tôi có giá trị nổi mà tôi muốn làm tròn đến gần nhất .5 và sau đó sử dụng nó để đặt văn bản trên nhãn.

Ví dụ:

1,4 sẽ là một chuỗi của: 1,5

1.2 sẽ là một chuỗi: 1

0.2 sẽ là một chuỗi các: 0

Tôi đã đã dành một thời gian để tìm kiếm câu trả lời của Google nhưng, là một noob với Objective-C, tôi không chắc chắn nên tìm kiếm gì! Vì vậy, tôi thực sự đánh giá cao một con trỏ đi đúng hướng!

Cảm ơn, Ash

+27

Trừ thêm giá trị cho một nhãn (mà anh ấy tuyên bố như ý định của mình và không thực sự hỏi về) câu hỏi của anh không có gì để làm với Cocoa và tất cả mọi thứ để làm với Obj-C –

Trả lời

97

Cám ơn các con trỏ tất cả mọi người, tôi đã quản lý để đưa ra một giải pháp:

float roundedValue = round(2.0f * number)/2.0f; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:1]; 
[formatter setRoundingMode: NSNumberFormatterRoundDown]; 

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; 
[formatter release]; 

Các công trình trên cho các trường hợp thử nghiệm tôi đã ném vào nó, nhưng nếu có ai biết một cách tốt hơn để làm điều này tôi muốn được nghe nó!

+7

Nếu điều này đang được xuất ra một trường văn bản, bạn có thể chỉ cần đính kèm trình định dạng vào trường. – Chuck

31
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number)/2.0f]; 
24

Sử dụng lroundf() để làm tròn một phao thành số nguyên và sau đó chuyển đổi số nguyên thành chuỗi.

+0

Điều này có vẻ hơi khó hiểu, vì vậy tôi làm rõ. 'lroundf()' làm tròn một số float thành một số nguyên và trả về số nguyên dài (để chuyển đổi nó thành một chuỗi, bạn có thể sử dụng 'stringWithFormat:'). – Daniel

11
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)]; 
2
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber]; 
35
float floatVal = 1.23456; 

Làm tròn

int roundedVal = lroundf(floatVal); 

NSLog(@"%d",roundedVal); 

làm tròn lên

int roundedUpVal = ceil(floatVal); 

NSLog(@"%d",roundedUpVal); 

Rou nding Xuống

int roundedDownVal = floor(floatVal); 

NSLog(@"%d",roundedDownVal); 
2

Kỹ thuật sau đây đã làm việc cho tôi trong đơn đăng ký tài chính.

NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; 

     monthlyPaymentCalculated=[dd doubleValue]; 

self.monthlyPaymentCritical=monthlyPaymentCalculated; 

những gì đang làm là lần đầu tiên được làm tròn nó với% 0.2f và lưu trữ nó trong NSString sau đó tôi chỉ đơn giản là chuyển đổi nó một lần nữa vào đôi và kết quả là tốt cho tính toán của tôi.

0

Tôi cần thiết để có thể làm tròn đến một chữ số cụ thể (không nhất thiết là toàn bộ số nguyên).Tôi đã thực hiện một loại NSNumber (dựa tắt Ash's answer) và bổ sung các phương pháp sau đây với nó:

- (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode 
     toPositionRightOfDecimal:(NSUInteger)position 
{ 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setMaximumFractionDigits:position]; 
    [formatter setRoundingMode:roundingMode]; 
    NSString *numberString = [formatter stringFromNumber:self]; 
    return numberString; 
} 

nào cho phép tôi sử dụng nó như vậy:

[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2]; 

tôi có thể sử dụng nó để làm tròn đến số nguyên bằng đi qua trong 0 như tham số thứ hai:

[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0]; 
0

với các chức năng này bạn có thể khỏa lấp với bất kỳ giá trị .. Nếu bạn sử dụng p = 2, bạn sẽ có được số chẵn.

float RoundTo(float x, float p) 
{ 
    float y = 1/p; 
    return int((x+(1/(y+y)))*y)/y; 
} 

float RoundUp(float x, float p) 
{ 
    float y = 1/p; 
    return int((x+(1/y))*y)/y; 
} 

float RoundDown(float x, float p) 
{ 
    float y = 1/p; 
    return int(x*y)/y; 
} 
3

một cách đơn giản:

float theFloat = 1.23456; 
int rounded = roundf(theFloat); NSLog(@"%d",rounded); 
int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); 
int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); 
// Note: int can be replaced by float 
Các vấn đề liên quan