2016-03-20 12 views
1

私は非常に大きな数字を使用する必要があるゲームを作っています。私はNSDecimalで非常に大きな数を格納できると信じています。しかし、ユーザーに数値を表示するときには、大きな数値を文字を使用して値を表す簡略な文字列に変換することができるようにしたいと考えています。 100,000→100k 1,000,000→1.00M 4,200,000,000→4.20Bなどと非常に多くなります。任意のは、そうするための方法で構築されたか、私は数の大きさを決定し、変換すること非常に大きいNSDecimalを文字列に変換します。 400,000,000,000 - > 400 Tなど

NSDecimalCompare文の束を使用する必要がありますありますか?

私はアプリケーションに目的cを使用したいと考えています。

私はNSString * string = NSDecimalString(& NSDecimal、_usLocale)を使用できることを知っています。文字列に変換すると、私はこの文字列を比較して結果を得ることができますか?

+1

は 'NSByteCountFormatter'を使用してください。 – rmaddy

答えて

-1

は私の問題を解決:だけことができますあなたがフォーマットしようとしているNSDecimalが小数点なしで整数になることが分かっている場合に使用されるので、NSDecimで任意の数式を実行するときに必ず丸めますまた、

-(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; 

} 
+0

あなたは 'characterCount'を' suffixes'へのインデックスに変換する簡単な式にそれを圧縮することができます。 'のような何か(characterCountに - 1)/ 3 - 計算は、インデックス= CEIL((characterCountに - 6)/ 3.0F)'使用suffixes' 'のインデックスが – Sulthan

+0

'1' – Joost

+0

おかげでみんながちょうど気づいた私はそれを投稿し、私が実現した後、キャラクター数/ 3を切り上げて2を引いてインデックスを得ることができます –

-1

使用は、あなたが必要なだけのように小さい形式に番号を変換するには、この方法:

-(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 

Source

+1

残念ながら、NSNumberに格納できるものよりも大きい数値を使用する必要があります。NSDecimalを使用する必要があります。 –

関連する問題