如何在不四舍五入的情况下将字符串转换为货币?

How to convert string to currency without rounding up?

我正在使用以下代码将字符串转换为美国货币。但是,我不知道如何禁用四舍五入。

例如,如果字符串值为“0.000012”,代码会将其转换为“$0.00”。

我正在使用的扩展来自这个 SO answer:

我使用的方式:

print(Formatter.currency.locale)    // "en_US (current)\n"
print(priceUsdInt.currency)         // ".99\n"

0.000012 不应该转换为 0.01 ,那是错误的。 如果你想设置不同的格式,你可以更改小数点

String(format: "%0.3f", string)

要控制舍入(在这种情况下接受点后的 6 位数字)将 formatter.maximumFractionDigits = 6; 添加到您的 Formatter 扩展名

extension Formatter {
    static let currency = NumberFormatter(style: .currency)
    static let currencyUS: NumberFormatter = {
        let formatter = NumberFormatter(style: .currency)
        formatter.locale = Locale(identifier: "en_US")
        formatter.maximumFractionDigits = 6;
        return formatter
    }()
    static let currencyBR: NumberFormatter = {
        let formatter = NumberFormatter(style: .currency)
        formatter.locale = Locale(identifier: "pt_BR")
        formatter.maximumFractionDigits = 6;
        return formatter
    }()
}