You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:如何让Text视图使用数字格式时即时显示小数点?

SwiftUI中实现.number格式下小数点即时显示

问题的核心在于:当你输入"10."时,将其转为Double会得到10.0,而.number格式默认不会显示末尾的小数点和零,所以只有输入下一位数字后才会展示小数点。要解决这个问题,我们可以通过判断输入字符串的结尾是否为小数点,针对性处理格式化逻辑,既保留千位分隔符,又能即时显示小数点。

解决方案:自定义格式化逻辑

添加一个计算属性,根据输入字符串的状态返回对应的格式化结果:

struct AddTransaction: View {

    private enum Constants {
        static let amountFont = Font.title
        static let amountFontWeight = Font.Weight.semibold
        static let padding: CGFloat = 42.0
    }

    @State private var amountString = "0"

    // 自定义格式化逻辑
    private var formattedAmount: String {
        if amountString.hasSuffix(".") {
            // 处理小数点结尾的情况:格式化整数部分后拼接小数点
            let integerPart = String(amountString.dropLast())
            let number = Double(integerPart) ?? 0.0
            return number.formatted(.number) + "."
        } else {
            // 正常情况使用.number格式
            let number = Double(amountString) ?? 0.0
            return number.formatted(.number)
        }
    }

    var body: some View {
        NavigationView {
            VStack {
                // 使用自定义格式化后的字符串
                Text(formattedAmount)
                    .font(Constants.amountFont)
                    .fontWeight(Constants.amountFontWeight)

                Spacer()

                NumberPad(numberString: $amountString)
                    .padding(.horizontal, Constants.padding)

            }
            .navigationTitle("Add Transaction")
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}

逻辑说明

  • 当输入字符串以小数点结尾时(比如"10."),我们先截取小数点前的部分,用.number格式处理千位分隔符,再手动补上小数点,确保符号即时显示。
  • 其他场景下(比如"100000"或"10.5"),依然使用默认的.number格式,保留千位分隔符和正常的小数显示。
  • 边界情况也能处理:比如输入"."时,会显示"0.",符合用户输入习惯。

内容的提问来源于stack exchange,提问作者Kex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:20:23