Arrays 仅显示存储在数组中的两个十进制数

Arrays 仅显示存储在数组中的两个十进制数,arrays,swift,uitableview,swift4,Arrays,Swift,Uitableview,Swift4,我有一个数组var priceUSDcoin=[String](),其中包含许多来自JSON数据的数字,这些数据有两个以上的十进制数,如2.073334,我希望数组中的所有数字只有两个十进制数,如2.07 我试图使用字符串(格式:“%.2f”),但失败了 我在我的tableview中调用了priceUSDcoin这里cell.priceLable.text=“$”+priceUSDcoin[indexPath.row] 我有一个数组var priceUSDcoin=[String](),其中包含

我有一个数组
var priceUSDcoin=[String]()
,其中包含许多来自JSON数据的数字,这些数据有两个以上的十进制数,如
2.073334
,我希望数组中的所有数字只有两个十进制数,如
2.07

我试图使用
字符串(格式:“%.2f”)
,但失败了

我在我的tableview中调用了
priceUSDcoin
这里
cell.priceLable.text=“$”+priceUSDcoin[indexPath.row]

我有一个数组
var priceUSDcoin=[String]()
,其中包含许多来自JSON的数字

您不应该将
数字
从JSON转换为
字符串
类型。尝试将它们保存到
Double
类型。在这种情况下,您的代码(几乎没有更新)工作正常:

let priceUSDcoin = [2.073334] // Array of `Double`
print(String(format: "%.2f", priceUSDcoin[0])) // prints 2.07

您可以使用
NumberFormatter
获得所需的结果。使用单个
flatMap
操作,将
字符串
价格转换为
Double
后,可以将数组的所有元素转换为所需格式

var priceUSDcoin = [String]()
priceUSDcoin = ["2.073334","1.245","0.1123"]

let priceFormatter = NumberFormatter()
priceFormatter.maximumFractionDigits = 2
priceFormatter.minimumIntegerDigits = 1

let priceUSD = priceUSDcoin.flatMap{ priceString->String? in
    guard let price = Double(priceString) else {return nil}
    return priceFormatter.string(for: price)
}
print(priceUSD)
输出:

[“2.07”、“1.24”、“0.11”]

如果要向用户显示价格,甚至可以设置
priceFormatter.numberStyle=.currency
,在这种情况下,结果将使用用户的区域设置格式化为货币。由于您的价格都是美元,因此您可以使用
priceFormatter.Locale=Locale(标识符:“en\u US\u POSIX”)
区域设置进行硬编码

输出:

[“$2.07”、“$1.24”、“$0.11”]


请注意,价格单位为美元。您应该使用固定的区域设置
“en_US\u POSIX”
,或者至少将数字格式化程序货币符号设置为美元
“$”