Fen*_*son 3 formatting ios floating-point-precision xctest
我想从浮点数中删除尾随零.我找到了多个帖子,但所有答案建议将float转换为NSString并使用NSFormatter.
虽然在大多数情况下这可能是好的,但我正在执行XCTests并且我需要float中的值 - 将生成的String转换回float不会给出正确的结果.
输入:
arg0 = 0.0001;
arg1 = 0.0011;
Run Code Online (Sandbox Code Playgroud)
我想得到一个结果0.0012,但是加法arg0 + arg1给出了答案,0.01200而这又为XCTest Case产生了一个失败的测试.
我添加数字的方法是最简单的:
-(float)addNumber:(float)first toNumber:(float)second {
return first + second;
}
Run Code Online (Sandbox Code Playgroud)
还有测试用例:
- (void)testAddition3 {
arg0 = 0.0001;
arg1 = 0.0011;
result = [vc addNumber:arg0 toNumber:arg1];
XCTAssertEqual(result, 0.0012, @"Addition incorrect!");
}
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?
实际问题是浮点数学不精确 - 有些数字不能用二进制精确表示,并且由于微小的舍入误差等等,你无法确定结果.对于一个(人为的)例子,1.0 + 1.0 = 1.99999 ..这使得像平等这样的事情变得困难.
比较两个浮点数的典型方法是在一些错误(通常称为epsilon)内进行比较.你想要的功能XCTAssertEqualWithAccuracy,它将比较具有给定精度的两个浮点数
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |