此问题已在此处有答案:
Is floating point math broken?(33答案)
26天前关闭
export class AppService {
calculatePrice(books: Book[]): number {
// The idea is to group a sets of books together
if (books.length === 0) return 0;
if (books.length === 1) return PRICE;
const flatBooks = books.flat(2);
const setOfBooks = [...new Set(flatBooks)];
const cumulate = PRICE * setOfBooks.length * DISCOUNT[setOfBooks.length];
// remove elements
for (const book of setOfBooks) {
const index = flatBooks.indexOf(book);
flatBooks.splice(index, 1);
}
console.log(cumulate);
return cumulate + this.calculatePrice(flatBooks);
}
}
好吧,我做了一个递归函数的测试,但我得到了一个奇怪的情况。
而不是有184.4€的一组书的测试,我得到了184.39999999999999998
我用了一个加法和一个乘法,所以不可能得到这个价格所有细节都在下面
https://github.com/wajdibenabdallah/liberation-kata
只做clone然后pnpm i然后pnpm t
1条答案
按热度按时间rsaldnfx1#
由于floating point math is inaccurate,您需要使用
toBeCloseTo
Jest匹配器。IOW,在你目前正在做的测试中,例如。
你可以做
如果您不想切换到精确小数(例如,decimal.js)。