【问题标题】:Round function doesn't work as expected圆形功能无法按预期工作
【发布时间】:2015-06-23 19:32:58
【问题描述】:

我正在尝试用两位小数舍入一个 Double 值:

var x = 0.68999999999999995 var roundX = round(x * 100.0) / 100.0 println(roundX) // 打印 0.69

如果打印的值是正确的..但 var 值不是我期望的,继续 0.68999999999999995

我需要 Double 值...不像其他 StackOverflow 答案那样是 String :(

【问题讨论】:

  • 试试 println(round(roundX))
  • 也可以使用String函数格式化println(String(format: "%.2f", roundX))
  • 如果我使用 String 最终值为 0.68,我需要 0.69。 @user985366:/
  • 另一个线程中的一个答案建议使用 NSDecimalRound :developer.apple.com/library/ios/documentation/Cocoa/Reference/…
  • 另一个线程涵盖了Objective-C。许多新的 Swift 开发人员无法阅读 Objective-C,因此建议的重复答案并不是真正的重复。

标签: ios iphone xcode swift rounding


【解决方案1】:

像双精度数这样的浮点数没有小数位数。它们以二进制形式存储值,而 .69 之类的值无法准确表示。这只是计算机上二进制浮点的本质。

使用数字格式化程序,或按照@KRUKUSA 的建议使用 String(format:)

var x:Double = 0.68999999999999995
let stringWithTwoDecimals = String(format: "%.2f", x)
println(stringWithTwoDecimals)

【讨论】:

  • 如果我的回答满足您的需要,您应该接受。然后,当您获得足够的声望点时,您应该对您认为好的答案进行投票。 (支持是可选的。接受第一个正确答案几乎是 SO 的要求,除非您希望人们开始忽略您的问题。)
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多