如何在 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)
我尝试使用 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)