【问题标题】:How to convert string to currency without rounding up?如何在不四舍五入的情况下将字符串转换为货币?
【发布时间】:2018-04-05 05:09:04
【问题描述】:

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

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

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

我的使用方式:

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

【问题讨论】:

  • 0.000012 四舍五入到 2 位是 0.00... 那么您的问题究竟是什么?
  • 我不希望它被四舍五入。我希望它是“$ 0.00012”
  • 那么请先尝试阅读NumberFormatter docs,重点关注usesSignificantDigitsminimumSignificantDigits 属性,也许...?
  • 我会的,谢谢holex。

标签: ios swift number-formatting currency-formatting


【解决方案1】:

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

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

【讨论】:

  • 代码将其转换为“$0.00”而不是“0.01”。如果可能,我想将小数应用到现有代码中。感谢您的回复!
【解决方案2】:

要控制舍入(在这种情况下接受点后的 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
    }()
}

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多