用印度后缀 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万)等,因为这些缩写在不同的国家和地区是不同的。

您必须根据您的号码所属的类别转换号码,并使用NSNumberFormatterNSNumberFormatterCurrencyStyle,您可以根据您的要求格式化您的号码。

您可以根据需要使用以下代码转换货币金额:

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 格式化货币的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中基于印度编号系统格式化货币

Rails Number 到印度货币格式转换助手

如何使用 javascript/jquery 将数字格式化为印度货币(在数据表中)

DecimalFormat(数字格式)

java中 DecimalFormat格式的定义

java中 DecimalFormat格式的定义