2009-12-22 12 views
5

Mam następujący kodNSDecimalNumber Zera następujące miejsca po przecinku (iPhone SDK)

(...) 
numberStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain 
                    scale:2 
                  raiseOnExactness:NO 
                  raiseOnOverflow:NO 
                  raiseOnUnderflow:NO 
                 raiseOnDivideByZero:NO]; 

strThree = textFieldThree.text; 
strThree = [strThree stringByReplacingOccurrencesOfString:@"." withString:@""]; 

fieldOneDNa = (NSDecimalNumber *)[NSDecimalNumber decimalNumberWithString:strThree]; 
oneHundred = (NSDecimalNumber *)[NSDecimalNumber decimalNumberWithString:@"100"]; 
fieldOneDN = [fieldOneDNa decimalNumberByDividingBy:oneHundred 
             withBehavior:numberStyle]; 

firstStepReturn = [fieldOneDN stringValue]; 
textFieldThree.text = firstStepReturn; 
(...) 

Chciałbym móc mieć firstStepReturn mają 2 cyfry po przecinku, nawet jeśli są one .00 lub *. 0 . Na przykład, jeśli 323.390 zostało wprowadzone do pola tekstowego "textFieldThree", zostanie ono przetworzone i zwrócone do pola tekstowego jako 3233.90. W tej chwili wyświetla się jako 3233,9.

Każda pomoc zostanie bardzo doceniona.

Odpowiedz

4

Dlaczego nie skorzystać textFieldThree.text=[NSString stringWithFormat:@"%.2f",[fieldOneDN floatvalue]];

(lub coś podobnego - sorry jestem na komputerze już teraz, więc nie może to sprawdzić)

+1

Dzięki, ale starałem się unikać używania pływaka, ponieważ było to niedokładne, gdy użyto dużych liczb. Czy masz jakieś inne sugestie? – Chris

18

NSDecimalNumber podklas NSNumber więc wystarczy użyć NSNumberFormatter


NSDecimalNumber * dn = [NSDecimalNumber decimalNumberWithString:@"1234.5"]; 
NSNumberFormatter * nf = [[NSNumberFormatter alloc] init]; 
[nf setMinimumFractionDigits:2]; 
[nf setMaximumFractionDigits:2]; 
NSString *ns = [nf stringFromNumber:dn]; 

Simples

+0

jest również pomoc tutaj http://stackoverflow.com/questions/810161/nsnumberformatter-only-rounds-to-3-decimal-places – Andiih

Powiązane problemy