在swift中将逗号添加到字符串整数[关闭]

Posted

技术标签:

【中文标题】在swift中将逗号添加到字符串整数[关闭]【英文标题】:add comma to string integers in swift [closed] 【发布时间】:2019-05-25 13:44:02 【问题描述】:

好吧,看了一段时间后,我无法找到合适的答案来解决我的问题。

我有包含产品 pricez 数字的字符串。例如 1000、500 或 50。我希望将它们转换为 2 位小数:10.00、5.00 和 0.50

我怎样才能做到这一点,这是否也可以在不将它们转换为 int 或 float 以保留字符串的情况下实现?

【问题讨论】:

这个问题可能需要一些改进:当您似乎想要添加小数点时,标题会显示“添加逗号”;当(考虑到您的回答)您的意思似乎是“返回一个字符串”时,您专门说“不将它们转换为 int 或 floats”。 当您询问“不将它们转换为”数字类型时,实际情况是这正是您应该做的。然后您就可以享受NumberFormatter 的全部力量。本地化结果、小数分隔符、千位/分组分隔符等。虽然这个问题看起来像“只需插入一个.”,但它比这更复杂,NumberFormatter 是解决所有这些问题的一个很好、简单的解决方案。但它确实需要先将您的字符串转换为数值并除以 100。不要进行笨拙的字符串操作,而是使用适当的工具 NumberFormatter 【参考方案1】:

您可以尝试先将价格转换为整数,然后除以 100 - 这样您就有了小数/浮点值。然后使用NSNumberFormatter转回字符串

更新

let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
formatter.minimumIntegerDigits = 1
// formatter.decimalSeparator = "." <- optional step

let double1 = Double(0.5)
let double2 = Double(100.00)
let double3 = Double(50.00555)

print(formatter.string(for: double1))
print(formatter.string(for: double2))
print(formatter.string(for: double3))

// prints
Optional("0.50")
Optional("100.00")
Optional("50.01")

【讨论】:

【参考方案2】:

要将其转换为您想要的格式,您需要将数字字符串转换为浮点数,然后除以 100,然后再次返回一个字符串。

以下是我根据您的想法改编的扩展。

var numberString = "20"

extension String 
    var decimalString: String? 
        guard let float = Float(self) else  return nil 
        let fraction = float / 100

        return String(format: "%.2f", fraction)
    


// You could unwrap the option either this way...
if let decimalString = numberString.decimalString 
    print(decimalString)


// or this way...
print(numberString.decimalString ?? "Invalid value")

【讨论】:

【参考方案3】:

您必须使用 NumberFormatter 并将您的值除以 100

这里是一个简单的 String 扩展,如果字符串不能转换为 Double 它将返回字符串值:

extension String 
var convertToPrice: String? 
    guard let value = Double(self) else  return self 
    let divided = value / 100
    let currencyFormatter = NumberFormatter()
    currencyFormatter.numberStyle = .currency
    currencyFormatter.currencySymbol = ""
    currencyFormatter.decimalSeparator = "."
    if let priceString = currencyFormatter.string(for: divided) 
        return priceString
    
    return self


用法:

"50".convertToPrice // "0.50"

【讨论】:

您对 NSNumber 的看法是对的,我会更新我的答案,谢谢。我硬编码了小数点分隔符,因为在示例中没有货币符号,所以我认为格式总是像“0.50”,如果语言环境设置为他们使用逗号的国家,它会改变所以我对其进行硬编码以适合示例值 我认为假设 OP 想要将分隔符硬编码为 . 是一个真正的跳跃,即使这可能会让不同地区的用户感到困惑。这个问题的性质让我认为 OP 甚至没有考虑过语言环境…… 如果您将货币符号重置为空字符串,那么将数字格式化程序设置为货币有什么意义?为什么要硬编码小数分隔符? @rmaddy - FWIW,有一些语言的.decimal 格式与.currency 格式不同。例如。 ml_IN(马拉雅拉姆语)或en_FI(英语-芬兰)。此外,如果您想这样做,使用.currency 将按照习惯设置该区域的主要货币的小数位(在日元中,您通常没有任何小数位)。【参考方案4】:

发现这更容易:

func formatPrice(price: String) -> String
    let pr = Double(price)!/100
    return String(format: "%.2f",pr)


usage: formatPrice("1000") //returning 10.00

【讨论】:

感谢 Andrey Gershengoren 的澄清帮助我编写了这个函数 这也是一个解决方案,但无论如何都应该避免Double(price)! 是的,Joakim,但我返回的 String() 仍然是字符串 为什么要避免安德烈? @SalihanPamuk 如果你曾经在一个不会转换为双精度的字符串上运行 formatPrice(price:),它会抛出一个异常并且你的应用程序会崩溃。此外,如果您只需要 2 位小数,则不需要 Double。

以上是关于在swift中将逗号添加到字符串整数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中将字符串“One”的字符转换为整数“1”[关闭]

如何在swift中将逗号添加到数字?

在C#中将逗号添加到整数[重复]

在PHP中将字符串[基本上是逗号分隔的数字]转换为整数的最佳方法[重复]

如何在C#中将带逗号的字符串拆分为两个字符串[重复]

REACT - 如何在 Mui-Datatables 中将逗号分隔符添加到整数值