Потому что дизайнеры не решили его поддерживать. Это действительно будет действительно (насколько я вижу), но все существующие умные приведения применяются только к проверенному значению. Так что, вероятно, было бы нетривиально добавить, и как часто это будет использоваться?
Этот вид уточнения типов поддерживается обобщенными алгебраическими типами данных , которые поддерживаются в Haskell и OCaml (и в некоторой степени в Scala), но их система типов и вывод типов весьма отличаются Котлин.
Спасибо всем за указатели, мне удалось найти решение:
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];
Вышеуказанное работает для тестовые случаи, которые я бросил на это, но если кто-нибудь знает лучший способ сделать это, мне было бы интересно услышать это!
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
Я бы порекомендовал изучить использование NSNumberFormatter .
Используйте lroundf (), чтобы округлить число с плавающей запятой до целого, а затем преобразовать целое число в строку.
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];