Javascript Jasmine toBeCloseTo第二个参数是什么?

Javascript Jasmine toBeCloseTo第二个参数是什么?,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,Jasmine有很短的文档;通常这就足够了。不总是这样 我想知道toBeCloseTo的第二个参数到底是什么。官方参考仅显示: it("The 'toBeCloseTo' matcher is for precision math comparison", function() { var pi = 3.1415926, e = 2.78; expect(pi).not.toBeCloseTo(e, 2); expect(pi).toBeCloseTo(e, 0); })

Jasmine有很短的文档;通常这就足够了。不总是这样

我想知道toBeCloseTo的第二个参数到底是什么。官方参考仅显示:

it("The 'toBeCloseTo' matcher is for precision math comparison", function() {
    var pi = 3.1415926, e = 2.78;
    expect(pi).not.toBeCloseTo(e, 2);
    expect(pi).toBeCloseTo(e, 0);
});
好的,它是精确的,但在这种情况下,什么实际上意味着“精确”?“.”后面的数字应该是相同的吗

我的例子是:我想比较两个时间戳,以毫秒为单位;如果它们之间的差值小于100,对我来说没问题

例如,在下面的例子中,X的值是多少

var timestamp1 = 1501254807000;
var timestamp2 = 1501254807099;
var timestamp3 = 1501254807100;
var precision = X;
expect(timestamp1).toBeCloseTo(timestamp2, precision); //this should pass
expect(timestamp1).toBeCloseTo(timestamp3, precision); //this should NOT pass
如果精度仅适用于十进制数,我可以将整数除以1000得到十进制数,但无论如何,我不知道X是什么。 目前,我是这样做的:

 expect(Math.abs(timestamp2-timestamp1)).toBeLessThan(100);
但它的可读性不强,我想使用toBeCloseTo(因为它超越了…)

谢谢


编辑。以下结果可能会有所帮助:

expect(1000000.005).toBeCloseTo(1000000.000,3); //fails
expect(1000000.005).toBeCloseTo(1000000.000,2); //fails
expect(1000000.005).toBeCloseTo(1000000.000,1); //pass

正如@Nikolaj所述,“precision”参数指定匹配器将检查精度的小数位数,并进行舍入

对于您给出的示例,前两个断言失败,因为分别在小数点后3位和2位,发现数字不同(在小数点后2位,尾随的05四舍五入为1)。小数点后1位的数字相同

匹配器不接受负精度值,例如:

expect(1000).toBeCloseTo(1003,-1); //pass
expect(1000).toBeCloseTo(1100,-2); //fail
expect(1000).toBeCloseTo(1100,-3); //pass

但除此之外,它的可调节性不强。遗憾的是,这并不意味着matcher不适合您的目的,因此您可能会坚持您建议的解决方案。

以下是Jest文档中的一个示例,它帮助我更好地理解了
toBeCloseTo
matcher的价值

expect(0.1+0.2).toBe(0.3); // fails becouse it's 0.30000000000000004
expect(0.1+0.2).toBeCloseTo(0.3); // pass

你试过看吗?文档上写着“要检查的小数点的数量”。顺便说一句,我添加了一个新的示例,这似乎与NikolajGoogle给我带来的文档不符:jasmine.github.io/2.0/introduction.html-这是我知道的jasmine的唯一文档/参考:)不管怎样,他们给出的示例(我在问题中抄袭了)至少很奇怪。有人可能会问为什么,如果精度为2,示例中的变量pi和e不接近,如果精度为0,它们接近。@fatLewis查看源代码?文档应该做得很好,为了不需要查看源代码以了解这些细节,我想……我通常会同意docu但是matcher代码非常短(不到40行)并且有JSDoc标记。我稍后会写一个答案,但是@Nikolaj是正确的。