字符串格式化比将 Double 转换为 Int 更昂贵吗?

you*_*oui 0 string casting string-formatting swift

我必须在用 Swift 编写的程序中选择两者之一,但我想我使用哪种编程语言并不重要。

我知道字符串格式化非常昂贵,并且怀疑它比将 Double 转换为 Int 更昂贵,但我什至不确定,最重要的是,到目前为止,我不明白为什么会出现这种情况。

另外,我在这里想做的是截断一个数字并将其打印到控制台,不带小数部分(这意味着我不希望它看起来像这样,0.0而是像这样0)。最有效的方法是什么?

有人可以启发我吗?

这是代码(第一行进行字符串格式化,第二行进行转换):

print(String(format: "%.0f", sender.value))

Int(sender.value)
Run Code Online (Sandbox Code Playgroud)

Bri*_*etz 5

这并没有回答最接近的问题,但希望算作“启蒙”。

答案是:不再担心微观性能问题;大约 99.999% 的时间里,它们是一种危险的干扰。相反,要专注于编写清晰、可读、明显正确的代码。一个速度快但错误的程序比没有程序要糟糕得多。另一方面,一个正确但可以更快的程序仍然非常好。当你足够优秀以至于你的程序始终正确时,那么也许是时候开始考虑提高性能了。清晰正确的代码可以根据需要进行优化;如果不付出更多努力,“聪明”的快速但错误的代码很少能变得正确。(举个例子:你的“更快”版本丢弃了可能重要的信息:双精度数的非整数部分。也许这没关系,也许不是——你没有说——但这是人们的错误当他们让性能领先于正确性时,经常会这样做。)

对于您的特定问题,动态情况甚至更糟,因为格式化字符串只有一个原因 - 即将其写入某个 IO 通道。IO 已经比计算昂贵得多,因此 99.999% 的情况下,IO 过程中的小计算是否昂贵 5 倍或 10 倍并不重要。

此外,我们“了解”的关于性能的大部分内容(“我知道字符串格式化非常昂贵”)只是传说,而且常常是错误的或过时的。对于非专家所说的“昂贵”的东西要非常非常怀疑。

所以答案是“别担心,做清晰、正确、可读的事情。”