Currency NumberFormatter - 当数字为整数时省略小数部分
Currency NumberFormatter - omit fraction part when the number is integer
我需要 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
是一个简单的trim函数,你可以把它放在String extension
或者你想要的任何地方。
func trimString(string: String) -> String {
if string.hasSuffix(".00") {
return String(string.dropLast(3))
}
else {
return string
}
}
您可能有疑问,为什么 alwaysShowsDecimalSeparator
不工作?它用于 .decimal
numberStyle
并且默认 decimalSeparator
是“.”
我需要 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
是一个简单的trim函数,你可以把它放在String extension
或者你想要的任何地方。
func trimString(string: String) -> String {
if string.hasSuffix(".00") {
return String(string.dropLast(3))
}
else {
return string
}
}
您可能有疑问,为什么 alwaysShowsDecimalSeparator
不工作?它用于 .decimal
numberStyle
并且默认 decimalSeparator
是“.”