在项目中有500.0或者500.00的状况需求处理

实习的同学写了一段这样的代码

public extension String {
    var trimZero: String {
        replacingOccurrences(of: ".00", with: "").replacingOccurrences(of: ".0", with:"")
    }
}

咋一看如同没啥问题,效果也符合预期

价格.0处理

可是上面的case其实没有掩盖全,例如:500.01,那上面的处理方式就有bug了,会被处理成5001

正确的处理方式

public extension String {
    var trimZero: String {
        guard let value = Double(self) else { return self }
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = 0
        formatter.maximumFractionDigits = 2
        return formatter.string(from: NSNumber(value: value)) ?? self
    }
}

测验效果

价格.0处理

参看

  • iOS中一个很重要,可是不熟悉的类NumberFormatter