Swift中夸脱转杯的体积单位转换结果异常,求助排查原因
Swift中夸脱转杯的体积单位转换结果异常,求助排查原因
嘿,这个问题我之前踩过坑!完全不是你的代码问题,也不是Swift的bug,核心是单位定义的细节差异在搞鬼~
我们平时说的“1夸脱=4杯”,指的是美制惯用液体夸脱(US liquid quart)转美制惯用杯(US customary cup)——前者是946.353mL,后者是236.588mL,刚好是4倍的关系。但Swift的Measurement框架里,默认的UnitVolume.cups对应的是美制法定杯(US legal cup)(容量240mL,是食品标签等官方场景用的标准),所以用默认的cups来转换的话,计算式就是 946.353 / 240 ≈ 3.9431375,也就是你看到的测试失败结果。
解决方法很简单,把转换的目标单位换成专门的美制惯用杯单位就行,修改后的测试代码如下:
func testUnitConversions() throws { let quarts = Measurement(value: 1, unit: UnitVolume.quarts) let conversion = quarts.converted(to: UnitVolume.usCustomaryCups) let value = conversion.value XCTAssertEqual(value, 4) }
这样运行后,转换结果就会是精确的4,测试就能顺利通过啦。
另外补充一句:如果你想让代码更清晰,也可以把夸脱单位明确写成UnitVolume.usLiquidQuarts,不过默认的quarts本身就指代美制液体夸脱,所以不修改也不影响结果。
备注:内容来源于stack exchange,提问作者Cosmo
相关产品推荐
相关产品推荐

