Najprostszym sposobem jest prawdopodobnie samodzielne rzucenie. Musiałem to zrobić w C wcześniej, ponieważ nie ma sposobu, aby uzyskać pożądane zachowanie z formatowaniem printf
.
Wygląda na to, że nie jest to dużo łatwiejsze w Objective-C. Dałbym to spróbować:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
while ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
if ([ftotal hasSuffix:@"."]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
czy to (być może szybciej) Wariant:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
if ([ftotal hasSuffix:@".00"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-3];
} else {
if ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
}
The stringWithFormat
gwarancji nie zawsze będzie ".nn"
na końcu (gdzie n
jest cyfrą znaków) . while
i if
po prostu usuwają końcowe zera i końcowe dziesiętne, jeśli jest to liczba całkowita.
Oczywiście możesz umieścić go w funkcji lub klasie, dzięki czemu możesz uzyskać do niego dostęp z dowolnego miejsca, bez konieczności duplikowania kodu w całym miejscu.
to nie jest duplikatem http://stackoverflow.com/questions/4985791/round-double-value-to-2-decimal-places więc myślę, że powinno być nieoznaczone jako duplikować. To pytanie dotyczy sposobu ograniczenia do * maksymalnej * dwóch miejsc po przecinku, podczas gdy inne pytanie brzmi: jak ograniczyć * zawsze * dwa miejsca po przecinku. To ostatnie jest łatwe i już wspomniano w pierwotnym pytaniu. –
To nie jest duplikat. Ktoś po prostu podekscytowany swoimi mocami. – Jacob