快速如何将十进制类型转换为字符串类型

Wil*_* Hu 8 decimal swift

如何快速转换DecimalString

例如

let de = Decimal(string: "123")
Run Code Online (Sandbox Code Playgroud)

那么如何转换de为String。

Mar*_*rco 8

利用 Decimal 符合协议的事实,CustomStringConvertible我会简单地做:

let decimalString = "\(de)"
Run Code Online (Sandbox Code Playgroud)

  • 字符串插值有效,但我更喜欢使用“String(describing: de)”,因为它是[Apple 推荐的](https://developer.apple.com/documentation/swift/customstringconvertible) 在操作符合 CustomStringConvertible 的类型时使用: “`String(describing:)` 初始值设定项是将 _any_ 类型的实例转换为字符串的首选方法。” (5认同)

Cha*_*ase 5

转换为 NSDecimalNumber 并使用 stringValue。

NSDecimalNumber(decimal: de).stringValue


小智 -3

使用 anNSNumberFormatter来解析您的输入。将其generatesDecimalNumbers属性设置为 true:

let formatter = NumberFormatter()
formatter.generatesDecimalNumbers = true
Run Code Online (Sandbox Code Playgroud)

如果您想在无法解析字符串时返回 0,请使用以下方法:

func decimal(with string: String) -> NSDecimalNumber {
    return formatter.number(from: string) as? NSDecimalNumber ?? 0
}

decimal(with: "80.00")

// Result: 80 as an NSDecimalNumber
Run Code Online (Sandbox Code Playgroud)

默认情况下,格式化程序将查看设备的区域设置以确定小数点标记。你应该就这样。举例来说,我将强制其使用法语语言环境:

// DON'T DO THIS. Just an example of behavior in a French locale.
formatter.locale = Locale(identifier: "fr-FR")

decimal(with: "80,00")
// Result: 80

decimal(with: "80.00")
// Result: 0
Run Code Online (Sandbox Code Playgroud)

如果你确实想始终使用逗号作为小数点,你可以设置该decimalSeparator属性:

formatter.decimalSeparator = ","
Run Code Online (Sandbox Code Playgroud)