有谁能告诉我如何在Swift中将一个双精度值四舍五入到小数点后的x位吗?

我有:

var totalWorkTimeInHours = (totalWorkTime/60/60)

totalWorkTime是秒的NSTimeInterval(双精度).

totalWorkTimeInHours会给我时间,但它会给我一个很长的精确数字,比如1.543240952039......

当我打印totalWorkTimeInHours时,我该如何将其舍入到1.543?

推荐答案

您可以使用Swift的round函数来实现这一点.

要以3位精度对Double进行四舍五入,首先将其乘以Double0,四舍五入并将四舍五入结果除以Double0:

let x = 1.23556789
let y = Double(round(1000 * x) / 1000)
print(y) /// 1.236

与任何类型的printf(...)String(format: ...)溶液不同,该操作的结果仍然是Double型.

EDIT:
Regarding the comments that it sometimes does not work, please read this: What Every Programmer Should Know About Floating-Point Arithmetic

Swift相关问答推荐

SwiftUI加载器未覆盖UIKit导航设置中的导航栏

启用完成并发判断以及如何解决警告(续)

SwiftUI正在初始化不带状态变量的绑定变量

为什么枚举上的.allCases.forEach不是循环(继续和中断不起作用)?

同时具有每个文本的标识符的文本组的可扩展性标识符

将变量设置为 @Published 会 destruct 代码而不会出现任何错误

暂停我的 AR 会话并清除变量和锚点的功能

Swift // Sprite Kit:类别位掩码限制

MainActor 隔离可变存储属性为何会出现可发送错误?

SwiftUI Preview 不适用于 Core Data

调用从 SwiftUI 视图传递到 PageViewController.Coordinator 的函数

在 xcode 13 中的构建之间保持可访问性权限

如何自己快速编写 Hashable 协议

Swift中的分段错误

如何使用 Swift/iOS 为人类书写的笔画制作动画?

是否可以在 Swift 中创建通用闭包?

如何实现 Swift 的 Comparable 协议?

如何快速截取 UIView 的屏幕截图?

是 swift 中另一个日期的同一周、月、年的日期

iOS/Swift:如何检测 UITextField 上的touch 动作