2013-03-07 21 views
7

Próbuję mieć ciąg liczbowy z dokładnością do 2 miejsc po przecinku, podczas gdy spoczynkowe miejsca dziesiętne są po prostu przycinane zamiast zaokrąglać je. Na przykład:Jak uniknąć zaokrąglania w NSNumberFormatter

I have: 123456.9964

I want: 123456.99 -> Just want to trim rest of the decimal places

Co Próbowałem to:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat: 123456.9964]]; 
NSLog(@"%@", numberAsString); 

Nie ma nic, aby ustawić tryb zaokrąglania jako "none". Co jeszcze mogę zrobić, aby zachować formatowanie stylu dziesiętnego wraz z przyciętymi cyframi dziesiętnymi? Każda pomoc zostanie doceniona. Dzięki.

Odpowiedz

13

następujące prace dla mnie:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
// optional - [numberFormatter setMinimumFractionDigits:2]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
NSNumber *num = @(123456.9964); 
NSString *numberAsString = [numberFormatter stringFromNumber:num]; 
NSLog(@"%@", numberAsString); 

wyjście jest: 123,456.99

Częścią problemu jest zastosowanie numberWithFloat: zamiast numberWithDouble:. Twój numer zawiera zbyt wiele cyfr dla float.

+0

Dziękuję, że zadziałało :) – NightFury

0
[numberFormatter setRoundingMode: NSNumberFormatterRoundDown]; 

Użyj tego kodu.

+0

Nie działa. Otrzymuję dane wyjściowe jako: 123457, a chcę 123456.99. – NightFury

+0

@AumumAmin. Co to jest również określenie minimalnej cyfry ułamkowej 2? – rmaddy

+0

@maddy, jeśli określę ułamki min jako 2 (co jest moim wymaganiem), nadal otrzymuję 123457.00 – NightFury

1

można użyć tego

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble: 123456.9964]]; 
NSLog(@"%@", numberAsString); 
+0

Dzięki tobie też ... przepraszam, mogę zaakceptować tylko jeden ans. – NightFury

+0

nie ma problemu ... :) – Aravindhan

0

można też po prostu użyć round(), a następnie przekształcić go w ciąg potem

var y = round(100 * 123456.8864)/100 

var x:String = String(format:"%.2f", y) 
println("x: \(x)") 

będzie drukować x: 123456.89, zaokrąglenia 8 do 9

+0

whoops! zapomniałem o części nie zaokrąglającej. –