如何在不四舍五入的情况下将字符串转换为货币?
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
}()
}
我正在使用以下代码将字符串转换为美国货币。但是,我不知道如何禁用四舍五入。
例如,如果字符串值为“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
}()
}