我只是创建了扩展:
extension NumberFormatter {
convenience init(digits: Int) {
self.init()
self.maximumFractionDigits = digits
self.minimumFractionDigits = digits
}
}
extension Int {
var descriptivePrice: String {
return NumberFormatter(digits: 2).string(from: NSNumber(value: Double(self * 100/10000))) ?? ""
}
}
并对此进行测试:
func testDescriptivePrice() {
XCTAssertEqual(2345.descriptivePrice, "23,45") //23,00
XCTAssertEqual(20000.descriptivePrice, "200,00")
XCTAssertEqual(20.descriptivePrice, "0,20") //0,00
XCTAssertEqual(2.descriptivePrice, "0,02") //0,00
}
为什么我的测试失败了?
发布于 2020-11-25 04:58:19
这与数字格式器无关,也与您如何将ints转换为双倍无关:
Double(self * 100/10000)
在这里,您将在除法后转换为Double
,所以您正在进行整数除法。换句话说,您只是删除一个整数的最后两位数。例如,在2345.descriptivePrice
中,在执行234500 / 10000
(= 23)时,45
部件已经丢失,然后才会发生NumberFormatter
-related内容。
您应该先将self
转换为Double
,然后再拆分:
Double(self) / 100
https://stackoverflow.com/questions/65004879
复制相似问题