I am working on the app in which I have to show fraction number on label.
NSMutableAttributedString * hogan = [[NSMutableAttributedString alloc] initWithSt
If you only want to use very common fractions, use their standard Unicode characters, as mentioned in other answers.
Or, to get an arbitrary fraction, you might want to hardcode all the characters for superscript and subscript decimals from Unicode. There is a special fraction slash, too.
The code below will convert an NSString
numerator and NSString
denominator into a fraction like ¹³⁄₅. Could easily be modified to use an NSNumberFormatter
.
// Constants for the different Unicode charcodes, where the nth array
// member is for the digit n.
NSArray *superscriptDigits = @[@"\u2070",
@"\u00b9",
@"\u00b2",
@"\u00b3",
@"\u2074",
@"\u2075",
@"\u2076",
@"\u2077",
@"\u2078",
@"\u2079"];
NSArray *subscriptDigits = @[@"\u2080",
@"\u2081",
@"\u2082",
@"\u2083",
@"\u2084",
@"\u2085",
@"\u2086",
@"\u2087",
@"\u2088",
@"\u2089"];
NSString *slashCharacter = @"\u2044";
+(NSString *)fractionStringFromDenominator:(NSString *)denominatorString
numerator:(NSString *)numeratorString {
NSMutableString *fractionString = [NSMutableString new];
for (int i = 0; i < denominatorString.length; i++) {
unichar c = [denominatorString characterAtIndex:i];
[fractionString appendFormat:@"%@", [self unicodeForDigitChar:c subscript:NO]];
}
[fractionString appendFormat:@"%@", slashCharacter];
for (int i = 0; i < numeratorString.length; i++) {
unichar c = [numeratorString characterAtIndex:i];
[fractionString appendFormat:@"%@", [self unicodeForDigitChar:c subscript:YES]];
}
return fractionString;
}
+(NSString *)unicodeForDigitChar:(unichar)c subscript:(bool)subscript {
if (c >= '0' && c <= '9') {
return subscript ? subscriptDigits[c - '0'] : superscriptDigits[c - '0'];
}
// Not a standard digit character
return @"";
}