繁体   English   中英

SwiftUI 字符串格式将我的值四舍五入到最接近的整数?

[英]SwiftUI String formatting is rounding my values to nearest whole number?

我希望你们一切都好!

我有一个(可能)愚蠢的问题。 我正在尝试通过重新创建 Instagram UI 来学习 SwiftUI 开发。

现在,我正在处理显示单个用户及其个人资料统计信息的用户页面。 我的字符串格式出现了一些奇怪的行为。

HStack (spacing: 24){
    VStack (alignment: .center, spacing: 2) {
        Text(postCountString)
            .font(.system(size: 16, weight: .bold))
        
        Text("Posts")
            .font(.system(size: 13, weight: .regular))
    }
    VStack (alignment: .center, spacing: 2) {
        Text(followerCountString)
            .font(.system(size: 16, weight: .bold))
        
        Text("Followers")
            .font(.system(size: 13, weight: .regular))
    }
    VStack (alignment: .center, spacing: 2) {
        Text(followsCountString)
            .font(.system(size: 16, weight: .bold))
        
        Text("Follows")
            .font(.system(size: 13, weight: .regular))
    }
}
.frame(maxWidth: .infinity)
.padding(.leading, 16)
.onAppear {
    postCountString = UIHelperFunctions.FormatCountNumber(number: creator.posts.count)
    followerCountString = UIHelperFunctions.FormatCountNumber(number: creator.followerCount)
    followsCountString = UIHelperFunctions.FormatCountNumber(number: creator.followsCount)
}

上面是 View 组件,它显示了创建者的主要统计信息(帖子、关注者、关注者)。 显示视图时,它应该通过我的 UIHelperFunction 运行每个统计信息,将数字格式化为可读的字符串,请参阅 function


import Foundation

class UIHelperFunctions {
    
     static func FormatCountNumber(number: Int) -> String {
        
         guard number > 1000 else {
             return String(number)
         }
         
         guard number > 10000 else {
             return String(format: "%.1fK", Double(number/1000))
         }
         
         guard number > 1000000 else {
             return String(format: "%dK", number/1000)
         }
         
         return String(format: "%.1fM", Double(number/1000000))

    }
    
}

// Example with input: 32495
print(UIHelperFunctions.FormatCountNumber(number: 32495)) // Output: 32K

但是,当我输入一个介于 1000 和 10000 之间的值时,它会返回一个接近值; 但是,它将小数位保留为 0。下图显示了我在输入值6748时在屏幕上看到的内容。 我希望它是 output 6.7K,但我看到的是 6.0K。

XCode 错误预览

我在做傻事吗? 如果不是,我是否误解了浮点数学在 SwiftUI 中的工作原理?

任何帮助将不胜感激; 如果您需要更多上下文或代码,请告诉我。

提前致谢:)

SwiftUI 为我们进行格式化,并在区域设置更改时自动更新屏幕上的UILabel ,只需执行以下操作:

Text(creator.posts.count, format: .number)

或者

Text("Count: \(creator.posts.count, format: .number)")

为了在未来获得 M、K 等,这应该可以工作(如果这得到批准

extension NumberFormatter {
    static var compact: NumberFormatter = {
       let f =  NumberFormatter()
       f.numberStyle = .compact
       return f
    }()
}

Text(creator.posts.count, formatter: NumberFormatter.compact)

Int 除以 Int 将是 Int,将其转换为 Double 为时已晚,您需要将 double 除以 double,例如

 guard number > 10000 else {
     return String(format: "%.1fK", Double(number)/Double(1000)))
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM