Если вы хотите пройти маршрут NSDecimalNumber, вы можете использовать следующее:
NSDecimalNumber *testNumber = [NSDecimalNumber numberWithDouble:theFloat];
NSDecimalNumberHandler *roundingStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers scale:3 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *roundedNumber = [testNumber decimalNumberByRoundingAccordingToBehavior:roundingStyle];
NSString *stringValue = [roundedNumber descriptionWithLocale:[NSLocale currentLocale]];
При этом будет использовано округление банкиров до 3 десятичных цифр: «Округлить до ближайшего возможного возвращаемого значения; когда на полпути между двумя вариантами, вернуть возможность, последняя цифра которой является четной. На практике это означает, что в долгосрочной перспективе числа будут округляться так часто, как они округляются в меньшую сторону; систематического отклонения не будет ». Кроме того, он будет использовать специфичный для локали десятичный разделитель (".", "," И т. Д.).
Однако, если у вас есть числовое значение, такое как 12,5, оно вернет «12,5», а не «12,500», что может не соответствовать тому, что вы ищете.