1

非常に大きな数を使用する必要があるゲームを作成しています。NSDecimal を使用すると、非常に大きな数を格納できると思います。ただし、数値をユーザーに表示するときは、大きな数値を文字を使用して値を表す簡潔な文字列に変換できるようにしたいと考えています。100,000 -> 100k 1,000,000 -> 1.00M 4,200,000,000 -> 4.20B など、非常に大きな数になります。そうするための組み込みの方法はありますか、それともたくさん使用する必要がありますか

NSDecimalCompare ステートメントは、数値のサイズを決定して変換しますか?

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

NSString *string = NSDecimalString(&NSDecimal, _usLocale); を使用できることはわかっています。文字列に変換するには、この文字列に対してある種の比較を行って、探している結果を取得できますか?

4

2 に答える 2

-1

私の問題を解決しました: フォーマットしようとしている 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;

}
于 2016-03-22T16:03:09.213 に答える