如何将十进制数转换为带有两位小数的字符串?

3
这是我现在的工作内容:
扩展 Decimal {
    var formattedAmount: String {
        let formatter = NumberFormatter()
        formatter.generatesDecimalNumbers = true
        formatter.minimumFractionDigits = 2
        formatter.maximumFractionDigits = 2
        return formatter.string(from: self) //类型不匹配
    }
}
但是我无法从 Decimal 创建 NSNumber。

2
string(for: self) - 参见 https://dev59.com/Nl0a5IYBdhLWcg3wva15#29999137 进行比较。 - Martin R
3
或者 string(from: self as NSDecimalNumber) - 参考 https://dev59.com/TVgR5IYBdhLWcg3wlOEr - Martin R
1
@MartinR 我没有注意到string(for: self)的存在,它有文档吗?我打算像你第二条评论中提到的那样添加一个答案,现在已经太晚了 :) - Ahmad F
1
{btsdaf} - Martin R
2个回答

8

这应该可以工作

extension Decimal {
    var formattedAmount: String? {
        let formatter = NumberFormatter()
        formatter.generatesDecimalNumbers = true
        formatter.minimumFractionDigits = 2
        formatter.maximumFractionDigits = 2
        return formatter.string(from: self as NSDecimalNumber)
    }
}

在将 Decimal 转换为字符串时,无需使用 generatesDecimalNumbers 属性。只有在将字符串转换为 Decimal 时才需要使用它。 - Roman

2
这是:

formatter.string(from: ...) // requires a NSNumber

你可以选择执行以下操作:

formatter.string(for: self) // which takes Any as argument

或者:

string(from: self as NSDecimalNumber) // cast self to NSDecimalNumber

1
Swift 3和Swift 4之间的语法没有改变。 - Martin R

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