当.999999时,Swift舍入到X小数位置会发出问题

时间:2018-01-09 09:09:54

标签: ios switch-statement rounding precision

我确实尝试了不同的舍入到小数位的方法,所有这些都有相同的共同点。当我使用数字时,假设为0.99999,我想将其舍入到2位小数。我的预期结果是0.99,但我得到1.00

我确实尝试了

let divisor = pow(10.0, Double(decimals))
let roundedVal = round(value * divisor) / divisor

也尝试了

String(format:"%.2f",decimals)

并且

let behavior = NSDecimalNumberHandler(roundingMode: .plain, scale: decimals, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)

NSDecimalNumber(value: value).rounding(accordingToBehavior: behavior)

let roundedValue2 = NSDecimalNumber(value: 0.6849).rounding(accordingToBehavior: behavior)

所有方法都给我同样的问题。 一些想法?

感谢您的帮助!

编辑: 这个想法是对于所有情况都可以进行舍入,但对于0.9999的情况则不行。显示数字总是很小(范围从0.000到1),显示的小数是参数,所以0.348应该是0.35而不是0.34(当中继时)

1 个答案:

答案 0 :(得分:1)

let amount = 0.99999999999999

let formatter = NumberFormatter()

formatter.numberStyle = .decimal

formatter.maximumFractionDigits = 2

formatter.roundingMode = .floor // rounding mode floor is the key here

let formattedAmount = formatter.string(from: amount as NSNumber)!

print(formattedAmount) // 0.99