Я хочу преобразовать строку в двойную и после некоторой математики преобразовать ее обратно в строку.
Как мне сделать это в Objective-C?
Есть ли способ округлить двойное число до ближайшего целого числа?
objective-c
cocoa
cocoa-touch
rksprst
источник
источник
Ответы:
Вы можете конвертировать NSString в двойной с
Округление до ближайшего целого может тогда быть сделано как
Я, честно говоря, не уверен, есть ли более простой способ конвертировать обратно в строку, чем
источник
[[NSNumber numberWithInt:myInt] stringValue]
Чтобы действительно преобразовать строку в число правильно, вам нужно использовать экземпляр,
NSNumberFormatter
настроенный для локали, из которой вы читаете строку.Разные локали будут форматировать числа по-разному. Например, в некоторых частях мира
COMMA
используется как десятичный разделитель, а в другихPERIOD
- разделитель тысяч (при использовании) переворачивается. За исключением случаев, когда это пробел. Или нет вообще.Это действительно зависит от происхождения входных данных. Самое безопасное, что нужно сделать, это настроить
NSNumberFormatter
способ форматирования вашего ввода и использовать его-[NSFormatter numberFromString:]
для полученияNSNumber
. Если вы хотите обрабатывать ошибки преобразования, вы можете использовать-[NSFormatter getObjectValue:forString:range:error:]
вместо этого.источник
Добавляя к ответу olliej, вы можете преобразовать int обратно в строку с
NSNumber
'sstringValue
:stringValue
наNSNumber
вызываетdescriptionWithLocale:nil
, давая вам локализованное строковое представление значения. Я не уверен,[NSString stringWithFormat:@"%d",myInt]
что даст вам правильно локализованное представлениеmyInt
.источник
Метод округления Олли не подходит для отрицательных чисел
Вот альтернатива
Конечно, вы можете использовать функцию округления из math.h
источник
Вот рабочий пример NSNumberFormatter, считывающий локализованное число String (xCode 3.2.4, osX 10.6), чтобы сэкономить другим часы, которые я только что потратил. Осторожно: хотя он может обрабатывать конечные пробелы, такие как «8 765,4», он не может обрабатывать начальные пробелы и не может обрабатывать символы случайного текста. (Неверные строки ввода: «8» и «8q» и «8 q».)
источник
nil
значение,NSNumber*
если оно не может быть проанализировано. Я не могу воспроизвести ту проблему, которая была у вас с начальными пробелами и случайными текстовыми символами, IMO работает правильно." 28.5 "
разбирает , как 28,5, и"gibberish28.5"
,"28.5gibberish"
и"gibberish28.5gibberish"
все поддается синтаксическому анализу;" 2 8 . 5. "
не разбирается, но это не необычно.источник
Для преобразования числа в строку, как насчет использования нового синтаксиса литералов (XCode> = 4.4), он немного более компактен.
( Объединяет его как NSNumber и преобразует в строку, используя метод описания NSObjects )
источник
Для округления вы, вероятно, должны использовать функции C, определенные в math.h.
Удерживайте Option и дважды щелкните
round
в XCode, и он покажет вам страницу руководства с различными функциями для округления различных типов.источник
Это самый простой способ, который я знаю:
источник
из этого примера вы можете увидеть преобразования в обоих направлениях:
источник
преобразовать текст, введенный в текстовое поле, в целое число
округление до ближайшего двойного
округление до ближайшего целого (с учетом только положительных значений)
преобразование из двойной в строку
или
преобразование из int в строку
или
источник
В итоге я использовал этот удобный макрос:
источник