将数字格式化为百分比

23

我不理解NSNumberFormatterPercentStyle的工作原理!

示例:

NSNumber *number = [NSNumber numberWithFloat:90.5];
NSNumberFormatter *percentageFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];

NSString *strNumber = [percentageFormatter stringFromNumber:numbericString];
NSLog (strNumber);  // Output: 9,050%

我只想显示"90.5%"(符合NSLocal)。NSNumberFormatterPercentStyle在处理90.5时是什么操作,为什么?我该如何获得所需的结果!?

7个回答

70

如果你的数字已经是百分比形式,只需将乘数设置为1

numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[numberFormatter setMaximumFractionDigits:0];
[numberFormatter setMultiplier:@1];

如果OP回来更新了,我也没关系。我的答案和其他相关答案都是在这个之前3年的。(我还假设setMaximumFractionDigits会将91%四舍五入,而不是完全满足OP的要求)(2010年iOS中是否有setMultiplier可用?) - John Gardner

29

假设这个数字在0-1的范围内,因为它是一个百分比

所以0.905会得到90.5%。


4

让我们从基础知识开始:

  • 1 = 100%
  • 1/2 = 0.5 = 50%

"百分比"的意思是"百分之几",所以12%的意思是12/100。你不需要"乘以100"来得到百分比值,你需要乘以100%(这与乘以1相同,也就是什么都不做)。

并非每个人都使用十进制(尽管大多数"现代"语言都是),也不是每个人都将100作为分母。例如,可以看到perMillSymbol(或kCFNumberFormatterPerMillSymbol)。没有"permill"格式,但可能会自动用于不使用百分比的语言环境。

另请参阅:千分号(‰)和万分号(‱)。


4

Swift 4/5

创建NSNumber扩展,就像这样:

extension NSNumber {
    func getPercentage() -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .percent
        formatter.maximumFractionDigits = 0 // You can set what you want
        return formatter.string(from: self)!
    }
}

获取百分比

let confidence = 0.68300 as NSNumber
print(confidence.getPercentage())

输出

68%


3

我不了解该语言,但根据你的代码示例和输出,我猜测百分比格式化器会将数值乘以100并添加%符号,这样1就成为了100%。而你想要的是使用0.905,它应该变成90.5%。


3

"百分数格式"的格式化程序希望输入数字 0.905,如果你想要得到 90.5%。它将 90.5 解释为相对于1的比例,所以它是1的9050%。


0

我的Swift干净解决方案:

创建一个NumberFormatter扩展,您可以在任何地方使用:

extension NumberFormatter {
    static var percentage: NumberFormatter {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .percent
        numberFormatter.maximumFractionDigits = .zero
        return numberFormatter
    }
}

此外,为例如Double创建扩展:
extension Double {
    var percentageValue: String? {
        return NumberFormatter.percentage.string(from: self as NSNumber)
    }
}

然后,使用这个:

let yourValue = 0.905
let percentageValue = yourValue.percentageValue

输出:

90.5%

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接