gpt4 book ai didi

objective-c - 将 int 转换为缩短的格式化字符串

转载 作者:太空狗 更新时间:2023-10-30 03:46:38 24 4
gpt4 key购买 nike

用户将以 int 形式输入美元值,我想将结果转换为缩短的格式化字符串。因此,如果用户输入 1700,该字符串将显示为“$1.7k”。如果用户输入 32600000,该字符串将显示为“$32.6m”。

更新

这是我目前的代码。它似乎适用于 ~10k 的数字。我只想为更大的数字添加更多的 if 语句。但是有没有更有效的方法来做到这一点?

NSNumberFormatter *nformat = [[NSNumberFormatter alloc] init]; 
[nformat setFormatterBehavior:NSNumberFormatterBehavior10_4];
[nformat setCurrencySymbol:@"$"];
[nformat setNumberStyle:NSNumberFormatterCurrencyStyle];
double doubleValue = 10200;
NSString *stringValue = nil;
NSArray *abbrevations = [NSArray arrayWithObjects:@"k", @"m", @"b", @"t", nil] ;

for (NSString *s in abbrevations)
{

doubleValue /= 1000.0 ;

if ( doubleValue < 1000.0 )
{

if ( (long long)doubleValue % (long long) 100 == 0 ) {
[nformat setMaximumFractionDigits:0];
} else {
[nformat setMaximumFractionDigits:2];
}

stringValue = [NSString stringWithFormat: @"%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] ];
NSUInteger stringLen = [stringValue length];

if ( [stringValue hasSuffix:@".00"] )
{
// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-3)];
} else if ( [stringValue hasSuffix:@".0"] ) {

// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-2)];

} else if ( [stringValue hasSuffix:@"0"] ) {

// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-1)];
}


// Add the letter suffix at the end of it
stringValue = [stringValue stringByAppendingString: s];

//stringValue = [NSString stringWithFormat: @"%@%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] , s] ;
break ;
}
}

NSLog(@"Cash = %@", stringValue);

最佳答案

unsigned long long value = 1700llu;
//value = 32600001llu;
//value = UINT64_MAX;

NSUInteger index = 0;
double dvalue = (double)value;
//Updated to use correct SI Symbol ( http://en.wikipedia.org/wiki/SI_prefix )
NSArray *suffix = @[ @"", @"k", @"M", @"G", @"T", @"P", @"E" ];

while ((value/=1000) && ++index) dvalue /= 1000;

NSString *svalue = [NSString stringWithFormat:@"$%.*f%@",
//Use boolean as 0 or 1 for precision
(int)(dvalue < 100.0 && ((unsigned)((dvalue - (unsigned)dvalue) * 10) > 0)),
dvalue, [suffix objectAtIndex:index]];
NSLog(@"Value: %@", svalue);

ARC 本地化版本

unsigned long long value = 1700llu;
//value = 32600001llu;
//value = UINT64_MAX;

NSUInteger index = 0;
double dvalue = (double)value;
//Updated to use correct SI Symbol ( http://en.wikipedia.org/wiki/SI_prefix )
NSArray *suffix = @[ @"", @"k", @"M", @"G", @"T", @"P", @"E" ];

while ((value/=1000) && ++index) dvalue /= 1000;

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
//Germany Example
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de-de"]];
//Set fractional digits to 0 or 1
[formatter setMaximumFractionDigits:(int)(dvalue < 100.0 && ((unsigned)((dvalue - (unsigned)dvalue) * 10) > 0))];

NSString *svalue = [[formatter stringFromNumber:[NSNumber numberWithFloat:dvalue]]
stringByAppendingString:[suffix objectAtIndex:index]];

NSLog(@"Value: %@", svalue);

关于objective-c - 将 int 转换为缩短的格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com