gpt4 book ai didi

iOS - 在不转换为字符串的情况下从 float 中删除尾随零?

转载 作者:可可西里 更新时间:2023-11-01 06:24:22 25 4
gpt4 key购买 nike

我想从 float 中删除尾随零。我找到了多个帖子,但所有答案都建议将 float 转换为 NSString 并使用 NSFormatter

虽然这在大多数情况下可能很好,但我正在执行 XCTest,我需要 float 中的值 - 将生成的字符串转换回 float 不会给出正确的结果。

对于输入:

arg0 = 0.0001;
arg1 = 0.0011;

我想要一个 0.0012 的结果,但是加法 arg0 + arg1 给出了 0.01200 的答案,这又会生成一个失败的测试用于 XC 测试用例。

我添加数字的方法是最简单的:

-(float)addNumber:(float)first toNumber:(float)second {

return first + second;
}

还有测试用例:

- (void)testAddition3 {

arg0 = 0.0001;
arg1 = 0.0011;

result = [vc addNumber:arg0 toNumber:arg1];

XCTAssertEqual(result, 0.0012, @"Addition incorrect!");
}

关于如何做到这一点有什么想法吗?

最佳答案

实际问题是 float 学并不精确——有些数字不能用二进制精确表示,并且由于微小的舍入误差等原因,您无法确定结果。举一个(人为的)例子,1.0 + 1.0 = 1.99999..这让平等之类的事情变得困难。

比较两个 float 的典型方法是在某个误差范围内进行比较(通常称为 epsilon)。您想要的函数是 XCTAssertEqualWithAccuracy,它将比较两个具有给定精度的 float

关于iOS - 在不转换为字符串的情况下从 float 中删除尾随零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28602224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com