SwiftUI保留两位小数和千分位分隔符
SwiftUI保留两位小数和千分位分隔符

SwiftUI保留两位小数和千分位分隔符

Text显示Double数值

在SwiftUI当中,如果使用Text显示Double数值时:

Text("\(difference)")

Text会显示Double的完整小数点,例如下面的380,000元。

会显示后面6位小数。

因此,可以通过String(format:) 格式化显示 Double 类型的数据,限制其显示的精度到小数点后两位。

Text("\(String(format: "%.2f",difference))")

通过数字格式化的形式,Text可以显示Double数值的后两位。

但是数值格式化后,千分位分隔符也会消失。

因此,如果想要同时保留两位小数和千分位分隔符,可以使用 NumberFormatter。

扩展格式化

创建一个辅助方法或扩展来格式化数字:

import Foundation

extension Double {
    func formattedWithTwoDecimalPlaces() -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = 2
        formatter.minimumFractionDigits = 2
        return formatter.string(from: NSNumber(value: self)) ?? "0.00"
    }
}

在显示的地方调用这个方法:

Text("\(difference.formattedWithTwoDecimalPlaces())")

在视图中实现了保留两位小数和千分位分隔符的效果:

最终实现了标题所阐述的效果。

代码讲解

import Foundation
extension Double {
    func formattedWithTwoDecimalPlaces() -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = 2
        formatter.minimumFractionDigits = 2
        return formatter.string(from: NSNumber(value: self)) ?? "0.00"
    }
}

这段代码是一个 Swift 扩展,定义了 Double 类型的新方法 formattedWithTwoDecimalPlaces,用于将一个 Double 数值格式化为具有两位小数的字符串,并支持千分位分隔符。

let formatter = NumberFormatter()

创建一个 NumberFormatter 对象,它是 Foundation 框架中专门用于数字格式化的工具。

formatter.numberStyle = .decimal

设置数字样式为 .decimal,启用千分位分隔符。

formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2

maximumFractionDigits = 2:最多保留 2 位小数。

minimumFractionDigits = 2:即使实际数值没有小数,也会填充到 2 位小数。

return formatter.string(from: NSNumber(value: self)) ?? "0.00"

使用 formatter.string(from:) 方法,将当前的 Double 值(self)转换为 NSNumber 并格式化为字符串。

如果格式化失败(返回 nil),则默认返回 “0.00”。

相关文章

SwiftUI格式化数据:https://fangjunyu.com/2024/12/23/swiftui%e6%a0%bc%e5%bc%8f%e5%8c%96%e6%95%b0%e6%8d%ae/

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注