Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jasmine中比较两个具有浮点值的对象?_Javascript_Object_Floating Point_Jasmine - Fatal编程技术网

Javascript 如何在jasmine中比较两个具有浮点值的对象?

Javascript 如何在jasmine中比较两个具有浮点值的对象?,javascript,object,floating-point,jasmine,Javascript,Object,Floating Point,Jasmine,我需要在《茉莉花》中做一些期待,比如: let realValue = callSomeMethod(); let expected = [{ total: 33, saved: 1.65 }]; expect(realValue).toEqual(expected); 但它失败了,信息是: Expect [ Object({ total: 33, saved: 1.6500000000000001 })] to equal [Object({ total: 33, save

我需要在《茉莉花》中做一些期待,比如:

let realValue = callSomeMethod();
let expected = [{
    total: 33,
    saved: 1.65
}];
expect(realValue).toEqual(expected);
但它失败了,信息是:

Expect [ Object({ total: 33, saved: 1.6500000000000001 })] 
to equal [Object({ total: 33, saved: 1.65 })].

如何进行正确的检查?

要关闭的
匹配器用于精确的数学比较:

expect(1.6500000000000001).toBeCloseTo(1.65, 2);
expect(1.6500000000000001).toBeCloseTo(1.65, 15);
expect(1.6500000000000001).not.toBeCloseTo(1.65, 16);

来源:

如果某些属性是浮动属性,而某些属性不是:

let realValue = callSomeMethod();
let expectedFloat = {
    saved: 1.65,
    otherFloat: 6.44
}
let expectedOther = {
    firstName: 'Paul',
    total: 33,
};
let expected = {
    ...expectedFloat,
    ...expectedOther
}

let floatNames = Object.getOwnPropertyNames(expectedFloat);
const testFloatProperty = (name) => () => { 
    expect(realValue[name]).toBeCloseTo(expectedFloat[name], 3)
}

for (let i in floatNames) {
    it('should be close to expected ' + floatNames[i], testFloatProperty(floatNames[i]));
}

it('should contain other expected props', function() {
    expect(realValue).toEqual(jasmine.objectContaining(expectedOther))
})

我对jasmine了解不够,但在一般计算中,比较两个浮点数的精度应该通过测试某个阈值内的接近度来完成,即
abs(realValue-expected)
toBeCloseTo对数字很有效。但是如果您想要断言一个具有20个属性的对象,并且一个属性是一个数字,那么您不能使用toEqual,需要执行20 expect。真遗憾。