Преобразование строки NSString в десятичную - PullRequest
0 голосов
/ 08 июля 2010

Мне нужно изменить приведенный ниже код, чтобы сделать intAmount десятичным или целым числом (т. Е. Человек может ввести 0,10 или 1) в моем поле uitext.Последняя строка «myProduct» должна быть десятичной, а не целой, и возвращать продукт, например, в формате «18.00».Может ли кто-то помочь кому-то помочь мне изменить мой фрагмент кода для этого?

//amt has to be converted into a decimal value its a NSString now
NSInteger intAmount = [amt intValue];
//where total gets updated in the code with some whole (integer) value
NSInteger total=0;
//Change myProduct to a decimal with presicion of 2 (i.e. 12.65)
NSInteger myProduct=total*intAmount;

ЭТО НЕ РАБОТАЕТ

NSDecimalNumber intAmount = [amt doubleValue];
//Keep in mind totalCost is an NSInteger
NSDecimalNumber total=totalCost*intAmount;

Ответы [ 3 ]

3 голосов
/ 08 июля 2010

Используйте doubleValue вместо intValue, чтобы получить правильное дробное число из вашего текстового поля. Поместите его в переменную типа double вместо NSInteger. Затем используйте формат %.2g при распечатке, и он будет выглядеть так, как вы хотите.

2 голосов
/ 08 июля 2010

Если вам нужно явно отслеживать десятичные значения, вы можете использовать NSDecimalNumber.Однако, если все, что вы делаете, это одна операция, решение Карла, скорее всего, будет адекватным.

0 голосов
/ 08 июля 2010

Если у вас есть строковое представление действительного числа (нецелого числа), вы можете использовать объект NSScanner для сканирования его в double или float или даже NSDecimal структура, если это ваше истинное намерение (структура NSDecimal и класс NSDecimalNumber полезны для содержания чисел, которые могут быть точно представлены в десятичном виде). ​​

NSString *amt = @"1.04";
NSScanner *aScanner = [NSScanner localizedScannerWithString:amt];
double theValue;

if ([aScanner scanDouble:&theValue])
{
    // theValue should equal 1.04 (or thereabouts)
}
else
{
    // the string could not be successfully interpreted
}

Преимущество использования локализованного NSScanner объектачто число интерпретируется на основе языкового стандарта пользователя, поскольку «1.000» может означать либо тысячу, либо всего лишь один, в зависимости от вашего языкового стандарта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...