为了账号安全,请及时绑定邮箱和手机立即绑定

将双值舍入为x小数位数

将双值舍入为x小数位数

慕码人8056858 2019-07-06 15:05:50
将双值舍入为x小数位数有人能告诉我如何在SWIFT中把一个双值乘以x小数位数吗?我有:var totalWorkTimeInHours = (totalWorkTime/60/60)带着totalWorkTime在第二位成为NSTimeInterval(双)。totalWorkTimeInHours会给我时间,但它给了我这么长的精确数字,比如1.543240952039.当我打印的时候,我该怎么把这个算到1.543呢?totalWorkTimeInHours?
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

你可以用斯威夫特的round功能来完成这一任务。

围成一圈Double使用3位精度,首先将其乘以1000,再将舍入的结果除以1000:

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

除了任何一种printf(...)String(format: ...)解决方案,此操作的结果仍然是类型的。Double.

编辑:
关于有时不起作用的评论,请阅读以下内容:

关于浮点算法,每个计算机科学家都应该知道些什么?


查看完整回答
反对 回复 2019-07-06
?
撒科打诨

TA贡献1934条经验 获得超2个赞

SWIFT 2分机

更通用的解决方案是以下扩展,它适用于SWIFT 2&iOS 9:

extension Double {
    /// Rounds the double to decimal places value    func roundToPlaces(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return round(self * divisor) / divisor    }}


SWIFT 3分机

在SWIFT 3round被替换为rounded:

extension Double {
    /// Rounds the double to decimal places value    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor    }}


示例,返回双四舍五入至小数点4位的示例:

let x = Double(0.123456789).roundToPlaces(4)  // x becomes 0.1235 under Swift 2
let x = Double(0.123456789).rounded(toPlaces: 4)  // Swift 3 version


查看完整回答
反对 回复 2019-07-06
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我怎样才能把这个算到,比方说,1.543呢?当我打印 totalWorkTimeInHours?

转圆totalWorkTimeInHours若要打印到3位数字,请使用String构造函数,该构造函数采用format字符串:

print(String(format: "%.3f", totalWorkTimeInHours))


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 541 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信