From fa5890cea53fcf96566284c98d7ac2c1a91f14cb Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 18 Mar 2025 15:21:50 +0800 Subject: [PATCH] fix(evaluator): fix round decimal places (#6492) --- .../src/utils/__tests__/formulajs.test.ts | 24 +++++++++++++++++++ .../src/utils/__tests__/mathjs.test.ts | 4 ++++ .../core/evaluators/src/utils/formulajs.ts | 2 +- packages/core/evaluators/src/utils/mathjs.ts | 2 +- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 packages/core/evaluators/src/utils/__tests__/formulajs.test.ts diff --git a/packages/core/evaluators/src/utils/__tests__/formulajs.test.ts b/packages/core/evaluators/src/utils/__tests__/formulajs.test.ts new file mode 100644 index 0000000000..cbefab9465 --- /dev/null +++ b/packages/core/evaluators/src/utils/__tests__/formulajs.test.ts @@ -0,0 +1,24 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import formulajs from '../formulajs'; + +describe('evaluators > formulajs', () => { + it('add new line in string', () => { + expect(formulajs(`CONCATENATE('a', '\\n', 'b')`)).toBe('a\nb'); + }); + + it('calculate null with number', () => { + expect(formulajs('null + 1')).toBe(1); + }); + + it('precision should be 9', () => { + expect(formulajs('100*2.3')).toBe(230); + }); +}); diff --git a/packages/core/evaluators/src/utils/__tests__/mathjs.test.ts b/packages/core/evaluators/src/utils/__tests__/mathjs.test.ts index 9acab4caec..3ae03e2105 100644 --- a/packages/core/evaluators/src/utils/__tests__/mathjs.test.ts +++ b/packages/core/evaluators/src/utils/__tests__/mathjs.test.ts @@ -13,4 +13,8 @@ describe('evaluators > mathjs', () => { it('matrix type should be to array', () => { expect(mathjs('range(1, 3, 1)')).toEqual([1, 2, 3]); }); + + it('precision should be 9', () => { + expect(mathjs('100*2.3')).toBe(230); + }); }); diff --git a/packages/core/evaluators/src/utils/formulajs.ts b/packages/core/evaluators/src/utils/formulajs.ts index 9385f2c5eb..21310158f3 100644 --- a/packages/core/evaluators/src/utils/formulajs.ts +++ b/packages/core/evaluators/src/utils/formulajs.ts @@ -22,7 +22,7 @@ export default evaluate.bind(function (expression: string, scope = {}) { if (Number.isNaN(result) || !Number.isFinite(result)) { return null; } - return round(result, 14); + return round(result, 9); } return result; }, {}); diff --git a/packages/core/evaluators/src/utils/mathjs.ts b/packages/core/evaluators/src/utils/mathjs.ts index 0dded6a5a3..0a1c66ae5a 100644 --- a/packages/core/evaluators/src/utils/mathjs.ts +++ b/packages/core/evaluators/src/utils/mathjs.ts @@ -18,7 +18,7 @@ export default evaluate.bind( if (Number.isNaN(result) || !Number.isFinite(result)) { return null; } - return math.round(result, 14); + return math.round(result, 9); } if (result instanceof math.Matrix) { return result.toArray();