swift中的会计取整

swift中的会计取整,swift,rounding,Swift,Rounding,我不知道如何在Swift中以以下方式对数字进行四舍五入: 6.51,6.52,6.53,6.54应四舍五入至6.50 6.56、6.57、6.58、6.59应四舍五入至6.55 我已经试过了 func roundDown(number: Double, toNearest: Double) -> Double { return floor(number / toNearest) * toNearest } 没有成功。有什么想法吗?这是你的问题(与Swift无关):浮点运算不精确。

我不知道如何在Swift中以以下方式对数字进行四舍五入:

6.51,6.52,6.53,6.54应四舍五入至6.50

6.56、6.57、6.58、6.59应四舍五入至6.55

我已经试过了

func roundDown(number: Double, toNearest: Double) -> Double {
    return floor(number / toNearest) * toNearest
}
没有成功。有什么想法吗?

这是你的问题(与Swift无关):浮点运算不精确。假设你试着用6.55除以0.05,结果是131.0。事实上,6.55是“接近6.55的某个数字”,0.05是“接近0.05的某个数字”,因此您得到的结果是“接近131.0的某个数字”。这个结果可能比131.0小一点点,可能是130.9999999999,floor()返回130.0

你所做的:你决定你仍然想要取整的最小数字是多少。例如,您希望130.9999999999给出131.0的结果。您可能希望130.9999给出131.0的结果。所以把你的代码改成

floor (number * 20.0 + 0.0001);

这将在6.549998到6.55之间循环,因此请检查您是否同意这一点。另外,floor()对于负输入的工作方式出乎意料,因此-6.57将被四舍五入到-6.60,这可能不是您想要的

roundDown(数字:6.56,音调最低点:0.05)
没有给出你想要的吗?是的,就是这样!我完全错过了。Thanksher就是一个失败的例子:
roundDown(数字:100.1,toNearest:0.05)
给出的是
100.05
,而不是预期的
100.1
。我不想将6.54四舍五入到6.55,而是6.50。舍入(数字:6.56,toNearest:0.05)除非您接受一些较小的数字也舍入为6.55,否则无法保证将6.55舍入为6.55。把“不可能”改为“不可能”。这是第6.54到6.5轮。