我得到一個代表價格的字串值。我想將其轉換為具有特定精度的另一個字串,并根據當前設備區域設定對其進行格式化。
Decimal(string: "123,4567", locale: NSLocale.current)?.formatted(.number.precision(.fractionLength(precision)))
此代碼適用于德語,輸出為"123,45"。但是,如果我切換到英語,則輸出為"123.00"。問題在于點而不是逗號。任何想法如何解決它并顯示正確的數字“123.45”?
uj5u.com熱心網友回復:
如果您只需要格式化十進制數字以使用特定貨幣顯示,那么您需要的是Decimal.FormatStyle.Currency。它將自動丟棄超出的精度長度:
let valueString = "1234,5678"
let decimalLocale: Locale = .init(identifier: "de_DE")
let currencyLocale: Locale = .init(identifier: "en_US") // or current (used US locale just for demonstration purposes)
if let decimal = Decimal(string: valueString, locale: decimalLocale),
let currencyCode = currencyLocale.currencyCode {
let currencyStyle: Decimal.FormatStyle.Currency = .init(code: currencyCode, locale: currencyLocale)
let currencyFormatted = decimal.formatted(
currencyStyle.rounded(rule: .towardZero)
)
print(currencyFormatted) // "$1,234.56\n"
}
編輯/更新:
我通常不喜歡處理字串,但如果您的源沒有特定格式,有時十進制分隔符是逗號,有時是句點,您需要在將字串逗號替換為句點之前將其替換為小數:
let valueString = "1234,5678"
let currencyLocale: Locale = .init(identifier: "en_US") // or current (used US locale just for demonstration purposes)
if let decimal = Decimal(string: valueString.replacingOccurrences(of: ",", with: ".")),
let currencyCode = currencyLocale.currencyCode {
let currencyStyle: Decimal.FormatStyle.Currency = .init(code: currencyCode, locale: currencyLocale)
let currencyFormatted = decimal.formatted(
currencyStyle.rounded(rule: .towardZero)
)
print(currencyFormatted) // "$1,234.56\n"
}
uj5u.com熱心網友回復:
用于輸入字串的語言環境必須與字串的格式匹配,因此如果它是德語格式,則使用德語語言環境
let locale = Locale(identifier: "de_DE")
let string = Decimal(string: "123,4567", locale: locale)?
.formatted(.number.precision(.fractionLength(precision)))
這使用 Locale.current (本例中為瑞典語)作為輸出
123,46
由于這是一個價格,這里是一個貨幣示例
let string = Decimal(string: "123,4567", locale: .current)?
.formatted(.currency(code: "EUR")
.precision(.fractionLength(2))
.rounded(rule: .down)
.locale(.current))
€123,45
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437382.html
上一篇:為什么UITableViewCells中的UIButtons會丟失它們在運行時設定的值并默認回傳到它們的InterfaceBuilder值?
