货币数字格式 - 当数字为整数

时间:2018-04-19 05:40:35

标签: ios cocoa number-formatting foundation nsnumberformatter

我需要使用我的NumberFormatter中的特定行为来输出货币:

  • 如果数字是整数(0,0.00),则不应显示小数分隔符(0€)
  • 另外(123.90,12.1),它应该在小数点分隔符后显示两位数(123.90€,12.10€)。

我现在创建和使用格式化程序的方法如下:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencySymbol = "€"
formatter.alwaysShowsDecimalSeparator = false
let num = formatter.string(from: 123.9)!

如果像这样创建,格式化程序总是显示小数分隔符,尽管我将此属性设置为false。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

货币numberStyle始终返回小数点后跟两位数。因此,如果您想实现目标,则应自行修改输出字符串。

请查看示例代码:

    let number1: Double = 123.908392857
    let number2: Int = 123
    let number3: Float = 123.00

    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.currencySymbol = "€"
    let num1 = formatter.string(from: NSNumber(value: number1))! // Output €123.91
    let num2 = formatter.string(from: NSNumber(value: number2))! // Output €123.00
    let num3 = formatter.string(from: NSNumber(value: number3))! // Output €123.00

    print("\(num1) \(num2) \(num3)")

    // This is trick
    let newNum1 = trimString(string: num1) // Output €123.91
    let newNum2 = trimString(string: num2) // Output €123
    let newNum3 = trimString(string: num3) // Output €123

    print("\(newNum1) \(newNum2) \(newNum3)")

trimString是一个简单的修剪功能,您可以将其放在String extension或任何您想要的位置。

func trimString(string: String) -> String {
    if string.hasSuffix(".00") {
        return String(string.dropLast(3))
    }
    else {
        return string
    }
}

您可能对alwaysShowsDecimalSeparator无效的原因有疑问?它适用于.decimal numberStyle,默认decimalSeparator是"。"