2014-11-17 4 views
1

Я пытаюсь отделить левое и правое числа от поплавка, чтобы я мог превратить их в строку. Так, например, 5.11, мне нужно иметь возможность превратить в строку, а в другую строку.Objective-C: Отдельное число справа/слева от десятичного числа

// from float: 5.11 
NSString * leftNumber = @"5"; 
NSString * rightNumber = @"11"; 

Из этого я могу превратить 5.11 в 5' 11"

+0

Вы знаете, конечно, что десятичная дробь делает а не «карта» на ноги/дюймы, а скорее (на 2 цифры) футов и сотых. И даже если значение имеет значение «футы/дюймы» для начала, считая его плавающим, а затем «воссоздавая» его, как вы делаете, может вызвать ошибки округления, если вы не будете осторожны. –

+0

Я знаю, что десятичное число не отображается в измерения высоты, спасибо. – WrightsCS

+0

Вы понимаете проблему округления? –

ответ

2

Один из способов:.

  1. Использование stringWithFormat для преобразования в строку "5.11"
  2. Используйте componentsSeparatedByString для разделения на массив «5» и «11».
  3. Комбинат e с stringWithFormat.
2

Вы можете использовать NSString stringWithFormat и математические функции для этого:

float n = 5.11; 
NSString * leftNumber = [NSString stringWithFormat:@"%0.0f", truncf(n)]; 
NSString * rightNumber = [[NSString stringWithFormat:@"%0.2f", fmodf(n, 1.0)] substringFromIndex:2]; 
NSLog(@"'%@' '%@'", leftNumber, rightNumber); 

Однако, это не является идеальным, особенно для представления длины в обычных единицах, поскольку 0,11 футов является не 11 дюймов. Вам лучше было бы представить длину как целое число в наименьших единицах, которые вы поддерживаете (например, 1/16-й дюйм), а затем преобразуете их в фактическую длину для целей отображения. В этом представлении 5 футов 11 в будет 5 * 12 * 16 + 11 * 16 = 1136.

1

Вы можете использовать номер форматировщик как таковой

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.numberStyle = NSNumberFormatterDecimalStyle; 
formatter.decimalSeparator = @"'"; 
formatter.positiveSuffix = @"\""; 
formatter.alwaysShowsDecimalSeparator = true; 
NSString *numberString = [formatter stringFromNumber:@(5.11)]; 

// Output : 5'11"