将非常大的 NSDecimal 转换为字符串,例如。400,000,000,000 -> 400 T等



我正在制作一个需要我使用非常大的数字的游戏。我相信我能够用 NSDecimal 存储非常大的数字。但是,在向用户显示数字时,我希望能够将大数字转换为简洁的字符串,该字符串使用字符来表示值,例如。100,000 -> 100k 1,000,000 -> 1.00M 4,200,000,000 -> 4.20B 等等,数量非常大。是否有任何内置方法可以这样做,或者我必须使用一堆

NSDecimal比较语句来确定数字的大小并转换?

我希望将目标 c 用于应用程序。

我知道我可以使用 NSString *string = NSDecimalString(&NSDecimal, _usLocale); 转换为字符串,然后我可以对这个字符串进行某种类型的比较以获得我正在寻找的结果吗?

根据需要,使用此方法将号码转换为较小的格式:

-(NSString*) suffixNumber:(NSNumber*)number
{
    if (!number)
        return @"";
    long long num = [number longLongValue];
    int s = ( (num < 0) ? -1 : (num > 0) ? 1 : 0 );
    NSString* sign = (s == -1 ? @"-" : @"" );
    num = llabs(num);
    if (num < 1000)
        return [NSString stringWithFormat:@"%@%lld",sign,num];
    int exp = (int) (log(num) / 3.f); //log(1000));
    NSArray* units = @[@"K",@"M",@"G",@"T",@"P",@"E"];
    return [NSString stringWithFormat:@"%@%.1f%@",sign, (num / pow(1000, exp)), [units objectAtIndex:(exp-1)]];
}

一些示例示例:

NSLog(@"%@",[self suffixNumber:@99999]); // 100.0K
NSLog(@"%@",[self suffixNumber:@5109999]); // 5.1M

解决了我的问题:仅当您知道您尝试格式化的 NSDecimal 只是一个没有小数的整数时才能使用,因此请确保在对 NSDecimal 进行任何数学运算时四舍五入。

-(NSString *)returnFormattedString:(NSDecimal)nsDecimalToFormat{
NSMutableArray *formatArray = [NSMutableArray arrayWithObjects:@"%.2f",@"%.1f",@"%.0f",nil];
NSMutableArray *suffixes = [NSMutableArray arrayWithObjects:@"k",@"M",@"B",@"T",@"Qa",@"Qi",@"Sx",@"Sp",@"Oc",@"No",@"De",@"Ud",@"Dud",@"Tde",@"Qde",@"Qid",@"Sxd",@"Spd",@"Ocd",@"Nvd",@"Vi",@"Uvi",@"Dvi",@"Tvi", nil];
int dick = [suffixes count];
NSLog(@"count %i",dick);
NSString *string = NSDecimalString(&nsDecimalToFormat, _usLocale);
NSString *formatedString;
NSUInteger characterCount = [string length];
if (characterCount > 3) {
    NSString *trimmedString=[string substringToIndex:3];
    float a;
    a = 100.00/(pow(10, (characterCount - 4)%3));
    int remainder = (characterCount-4)%3;

    int suffixIndex = (characterCount + 3 - 1)/3 - 2;
    NSLog(@"%i",suffixIndex);
    if(suffixIndex < [suffixes count]){
        NSString *formatSpecifier = [formatArray[remainder] stringByAppendingString:suffixes[suffixIndex]];
        formatedString= [NSString stringWithFormat:formatSpecifier,  [trimmedString floatValue] / a];
    }
    else {
        formatedString = @"too Big";
    }
}
else{
    formatedString = string;
}
return formatedString;
}

相关内容

最新更新