ios - 货币数字格式化程序 - 当数字为整数时省略小数部分

标签 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。

我怎样才能做到这一点?

最佳答案

货币 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 是 "."

关于ios - 货币数字格式化程序 - 当数字为整数时省略小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49913494/

相关文章:

ios - 设置图像的 UIButton 方法之间的区别

java - java中如何输入没有数字格式的逗号

java - 在java中我需要帮助格式化 ("%.2f", int);它不断输出##.##.#

r - 在 R 中,您将如何编写包装函数或类来将数字格式化为百分比、货币等?

swift - NSPageController 错误转换

ios - iOS:一个帐户两个iOS开发人员计划

ios - Gmail 集成时出现链接器错误

ios - 将麦克风用于 forge 中内置的 iOS 应用程序

objective-c - 无法在窗口上打开一张纸两次

iphone - 删除某个文件夹中的所有文件和文件夹