如何在 Javascript 中进行 2 位小数的摩卡测试 - Big 和 Decimal 都给出问题

How to have a Mocha test with 2 decimal places in Javascript - Big and Decimal both giving issues

我尝试使用 Big 库,但包含该代码只会给我一个错误

Error: Cannot find module 'tap' 
...

所以我尝试改用 Decimal。我做到了

npm install Decimal

然后添加

const Decimal = require('decimal');

我按照示例进行操作,但是当我使用

时,我只是得到 { Object (internal, as_int, ...) } 作为我的比较
const amount = 25.12
let expectedMoney;
const Decimal = require('decimal');
...
expectedMoney = new Decimal(amount * 1.1)
expect(27.63).to.equal(expectedMoney);

错误:

 AssertionError: expected 27.63 to equal { Object (internal, as_int, ...) }
  at Context.<anonymous> (index.test.js:19:22)

我也试过:

expect(27.63).to.equal(expectedMoney.as_int.value);

但这给出了

expected 27.63 to equal 27632000000000004

我试过了

expect(27.63).to.equal(expectedMoney.toFixed(5));

但这给出了

TypeError: expectedMoney.toFixed is not a function

如果您只想与一个简单的“双”数进行比较,则不需要任何库。
我以前做的是用两种方法把数字减到两位小数。

我使用数学方法使用我想要获得的精度并以这种方式减去值:

var precision = 0.01;
expect(Math.abs(27.63 - expectedMoney) <= precision).to.equal(true);

如果相差0.001或更多,则数字相同。因此,例如:1.00 将与 1.001 相同,但与 1.01 不同。

此处示例:

var precision = 0.01
//Works using 1 or 1.00
console.log(Math.abs(1 - 1.001) <= precision)
console.log(Math.abs(1 - 1.01) <= precision)

另一种方法是简单地使用 toFixed()parseFloat 因为 toFixed returns 一个字符串。

const amount = 25.12
var expectedMoney = parseFloat((amount* 1.1).toFixed(2))
expect(27.63).to.equal(expectedMoney);

示例:

const amount = 25.12
var expectedMoney = parseFloat((amount* 1.1).toFixed(2))
console.log(27.63 == expectedMoney)