Display fraction number in UILabel

前端 未结 5 580
情歌与酒
情歌与酒 2020-12-17 08:20

I am working on the app in which I have to show fraction number on label.

NSMutableAttributedString   * hogan = [[NSMutableAttributedString alloc] initWithSt         


        
5条回答
  •  無奈伤痛
    2020-12-17 08:55

    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 @"";
    }
    

提交回复
热议问题