swift 如何快速格式化一个带有千位分隔符的大数字?

kt06eoxx  于 2023-02-03  发布在  Swift
关注(0)|答案(8)|浏览(194)

是否有一个简单的命令可以将1.60543e+06格式化为1,605,436???
结果FV.文本=字符串。带有格式的本地化字符串(“%f”,fv)
不明白。

xv8emn3q

xv8emn3q1#

在雨燕3中,

NumberFormatter.localizedString(from: NSNumber(value: whatever), number: NumberFormatter.Style.decimal)
ac1kyiln

ac1kyiln2#

Swift Xcode 6.3,SOLVED(我决定在代码中保留$)。如果您不希望在输出中出现$,请将.CurrencyStyle更改为.DecimalStyle

var fv = 3534234.55 
var formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0;
resultFV.text = formatter.stringFromNumber(fv) // result: $3,534,235 –
xsuvu9jc

xsuvu9jc3#

为此,您应该使用NumberFormatter

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal

resultFV.text = numberFormatter.string(from: fv)
nhaq1z21

nhaq1z214#

Swift 4.1货币字符串更新:

let balance = 1234567

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 0

let result = formatter.string(from: NSNumber(value: balance)) 
// result: $1,234,567

您可以将formatter.numberStyle更改为.decimal,使其保留为不带“$”符号的数字。

ma8fv8wu

ma8fv8wu5#

你可以通过使用Swift 3+中的String初始化器来实现这一点:

// 1605436
let value: Int = 1605436

// "1,605,436" where Locale == en_US
let formattedInt = String(format: "%d", locale: Locale.current, value) 

// "1,605,436" where Locale == en_US
let formattedDouble = String(format: "%.0f", locale: Locale.current, Double(value))
798qvoo8

798qvoo86#

Swift 5的更新

var unformattedValue : Double = 3534234.55
var formatter = NumberFormatter()
formatter.numberStyle = .currency // or .decimal if desired
formatter.maximumFractionDigits = 2; //change as desired
formatter.locale = Locale.current // or = Locale(identifier: "de_DE"), more locale identifier codes: https://gist.github.com/jacobbubu/1836273
var displayValue : String = formatter.string(from: NSNumber(value: unformattedValue))! // displayValue: "$3,534,235" ```
3yhwsihp

3yhwsihp7#

为什么不限制精度,比如".0f"

resultFV.text = String.localizedStringWithFormat("%.0f", fv)

更新答案:

var formatter: NSNumberFormatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
var formattedStr: NSString = formatter.stringFromNumber(NSNumber(double: fv))!
resultFV.text = formattedStr
xuo3flqw

xuo3flqw8#

更新
使用Foundation中适用于macOS 12.0+、iOS 15.0+、tvOS 15.0+和watchOS 8.0+的数据格式。

let number: Int = 1000  
  let formatted = number.formatted(.number.grouping(.never))  
  print(formatted)

控制台输出:"1000"
number可以是任何BinaryFloatingPointBinaryInteger

相关问题