价格.0处理

3,046 阅读1分钟

在项目中有500.0或者500.00的情况需要处理

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

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

咋一看似乎没啥问题,结果也符合预期

image.png

但是上面的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
    }
}

测试结果

image.png

参考