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

iOS-在不转换为字符串的情况下从浮点中删除尾随零?,ios,formatting,floating-point-precision,xctest,Ios,Formatting,Floating Point Precision,Xctest,我想从浮点中删除尾随的零。 我发现了多篇帖子,但是所有的答案都建议将float转换为NSString并使用NSFormatter 虽然在大多数情况下这可能是好的,但我正在执行XCTests,需要浮点中的值—将生成的字符串转换回浮点不会给出正确的结果 输入: arg0 = 0.0001; arg1 = 0.0011; 我想要一个0.0012的结果,但是添加arg0+arg1得到的答案是0.01200,这反过来会生成测试用例的失败测试 我添加数字的方法是最简单的: -(float)addNumbe

我想从浮点中删除尾随的零。 我发现了多篇帖子,但是所有的答案都建议将float转换为NSString并使用NSFormatter

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

输入:

arg0 = 0.0001;
arg1 = 0.0011;
我想要一个
0.0012
的结果,但是添加
arg0+arg1
得到的答案是
0.01200
,这反过来会生成测试用例的失败测试

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

-(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!");
}

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

将断言更改为使用xctasertequalwithaccurity而不是xctasertequal

XCTASSERTEQUALWITH精度。当表达式1和表达式2之间的差异大于精度时生成故障。此测试适用于浮点和双精度等标量,其中微小的差异可能会使这些项不完全相等,但适用于所有标量


实际的问题是浮点数学并不精确——有些数字无法用二进制精确表示,而且由于微小的舍入误差等原因,您无法确定结果。对于(人为)示例,1.0+1.0=1.99999。。这使得平等这样的事情变得困难

比较两个浮点数的典型方法是在某个误差范围内进行比较(通常称为epsilon)。
您需要的函数是
xctasertequalwithaccurity
,它将以给定的精度比较两个浮点值

此时您的代码是什么样子的?很难从黑盒的角度理解为什么会得到这个结果。还有,为什么这些“尾随的零”会成为一个问题,除非你在某处显示数字(必须是字符串)?编辑了我的帖子,请看一看。在你回答之前几分钟我设法弄明白了,但比你,它解决了我的问题!:)是的,这解决了它,谢谢你的回答和有趣的解释:)没问题。您可能还想查看“XctaserteQualWithAccurance not working”的SO链接