用印度后缀 IOS 格式化货币
Posted
技术标签:
【中文标题】用印度后缀 IOS 格式化货币【英文标题】:Format currency with indian suffixes IOS 【发布时间】:2015-05-25 10:39:12 【问题描述】:我想将数字 13456 显示为 13.456K,3456789 为 34.56L。ios 中是否有任何格式化程序可以转换为 K(thousand),L(Lakh),M(Million),C(Crore) 后缀?
【问题讨论】:
什么是K、L、C,有什么关系?是否有简单的计算可以在它们之间进行转换? 千千(10^3),十万(10^5),亿万(10^7) 这些后缀没有格式化程序,但您可以使用Extension创建自己的格式化程序 【参考方案1】:iOS
中没有库或 sdk 用于使用 K(千)、M(百万) 等缩写来缩短或转换货币,类似地 L(100千)、C(1000万)等,因为这些缩写在不同的国家和地区是不同的。
您必须根据您的号码所属的类别转换号码,并使用NSNumberFormatter
和NSNumberFormatterCurrencyStyle
,您可以根据您的要求格式化您的号码。
您可以根据需要使用以下代码转换货币金额:
float shortenedAmount = actualAmount;
NSString *suffix = @"";
if(currency >= 10000000.0f)
suffix = @"C";
shortenedAmount /= 10000000.0f;
else if(currency >= 1000000.0f)
suffix = @"M";
shortenedAmount /= 1000000.0f;
else if(currency >= 100000.0f)
suffix = @"L";
shortenedAmount /= 100000.0f;
else if(currency >= 1000.0f)
suffix = @"K";
shortenedAmount /= 1000.0f;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:shortenedAmount]];
NSString *requiredString = [NSString stringWithFormat:@"%@%@", numberAsString, suffix];
【讨论】:
非常感谢。你节省了我的时间 :)【参考方案2】:IOS 不为这些后缀提供任何格式化程序。
您可以使用扩展程序制作自己的格式化程序。扩展将为您的程序添加新功能,它肯定会起作用:)
链接到extensions。
【讨论】:
【参考方案3】:请尝试以下自定义方法 -
-(NSString *)stringFormating:(int)numValue
NSString *valueString = [NSString stringWithFormat:@"%d", numValue];
if ([valueString length]>7)
NSString *strsecondPart= [valueString substringFromIndex:[valueString length] -7];
return [NSString stringWithFormat:@"%@.%dC",[valueString substringToIndex:[valueString length] -7],[strsecondPart intValue]];
else if ([valueString length]>5)
NSString *strsecondPart= [valueString substringFromIndex:[valueString length] -5];
return [NSString stringWithFormat:@"%@.%dL",[valueString substringToIndex:[valueString length] -5],[strsecondPart intValue]];
else if ([valueString length]>3)
NSString *strsecondPart= [valueString substringFromIndex:[valueString length] -3];
return [NSString stringWithFormat:@"%@.%dK",[valueString substringToIndex:[valueString length] -3],[strsecondPart intValue]];
return valueString;
NSLog(@"%@", [self stringFormating:100000]);
输出为 1.0L
NSLog(@"%@", [self stringFormating:123456]);
输出将是 1.23456L
【讨论】:
这是一种处理数字的有趣方式(我所说的有趣是指效率低下且违反直觉)。你也有多个return
声明,没有充分的理由。【参考方案4】:
这里是 Swift 的实现: 将 Swift 中的 NumberFormatter (NSNumberFormatter) 转换为印度编号格式的货币。
extension Int
func withCommas() -> String
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale(identifier: "en_IN") // English (Indian) locale with english language is used
return numberFormatter.string(from: NSNumber(value:self))!
//Easy to use:--
let strValue = "64567890"
let intValue = (strValue! as NSString).integerValue
print(intValue.withCommas()) // 6,45,67,890
// cell.lbl.text = intValue.withCommas()
【讨论】:
以上是关于用印度后缀 IOS 格式化货币的主要内容,如果未能解决你的问题,请参考以下文章