В цели c из числа с плавающей точкой я хочу отделить десятичные дроби для дальнейшей математической работы над - PullRequest
2 голосов
/ 28 октября 2011

Я настраиваю калькулятор, который будет генерировать число с плавающей запятой после ввода пользователя. В качестве примера: если сгенерированный ответ равен 1,75, это фактически означает 1,75 часа. Я хочу разделить ответ на две части, чтобы прочитать 1 час. 45 минут, которые будут более удобными для пользователя, чем 0,75 часа.

Так что мне нужно иметь возможность удалить целую цифру (ы) (в данном примере «1») перед десятичной дробью, чтобы получить значение переменной, используя .75 - вид вроде этого:

mIn = (.75 ​​* 60), что дало бы мне 45-минутное значение, чтобы положить в мой ...

[NSString stringWithFormat:@"@% hr. @% min", hRs, mIn]; тип заявления

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Вы почти наверняка не хотите использовать float для хранения введенного пользователем номера, особенно для калькулятора.Это приведет к ошибкам в десятичном / двоичном округлении, которые сведут вас с ума.Вы хотите использовать NSDecimalNumber для такой работы.

Другие ответы здесь будут работать, но вы хотите заменить floor() на decimalNumberByRoundingAccordingToBehavior:.Вы будете использовать NSDecimalNumberHandler с режимом округления NSRoundDown и соответствующим scale (возможно, 2 или 3 для ваших целей).

1 голос
/ 28 октября 2011

Используйте floor(floatValue), чтобы получить целую часть, вычтите это из floatValue, чтобы получить десятичную часть.

Ex:

float floatValue = 1.75;
float integerPortion = floor(floatValue);
float decimalPortion = floatValue - integerPortion;

NSString *timeString = [NSString stringWithFormat:@"%.0f hr. %.0f min", integerPortion, decimalPortion * 60];
NSLog(@"timeString: %@", timeString);

Вывод NSLog:

timeString: 1 hr. 45 min
0 голосов
/ 28 октября 2011

Вы можете преобразовать плавающее значение в целое число и вычесть его из значения, или вы можете получить его на полу.

float time = 1.75;
int minutes = (time - (int)time) * 60; //or (time - floor(time)) * 60;

NSLog(@"Time: %@", [NSString stringWithFormat:@"%d hr. %d min", (int)time, minutes]);
...