From bdd79bfcfcc9d69133150135ec3dd715cc242f3d Mon Sep 17 00:00:00 2001 From: Zhongyue Lin <101193087+LeoLin990405@users.noreply.github.com> Date: Wed, 15 Jul 2026 11:30:04 +0800 Subject: [PATCH] fix(xlsx): round MROUND midpoints away from zero Excel MROUND rounds midpoint values away from zero, but Math.Round defaults to ToEven. Pass MidpointRounding.AwayFromZero so midpoint multiples such as MROUND(0.5, 1) and MROUND(2.5, 1) match Excel. Refs #219. --- src/officecli/Core/Formula/FormulaEvaluator.Functions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/officecli/Core/Formula/FormulaEvaluator.Functions.cs b/src/officecli/Core/Formula/FormulaEvaluator.Functions.cs index 6b7e80a3c..f9f163367 100644 --- a/src/officecli/Core/Formula/FormulaEvaluator.Functions.cs +++ b/src/officecli/Core/Formula/FormulaEvaluator.Functions.cs @@ -60,7 +60,7 @@ internal partial class FormulaEvaluator "ODD" => FR(OddF(num(0))), "PRODUCT" => CheckRangeErrors(args) ?? FR(nums().Aggregate(1.0, (a, b) => a * b)), "QUOTIENT" => num(1) != 0 ? FR(Math.Truncate(num(0) / num(1))) : FormulaResult.Error("#DIV/0!"), - "MROUND" => num(1) != 0 ? FR(Math.Round(num(0) / num(1)) * num(1)) : FormulaResult.Error("#NUM!"), + "MROUND" => num(1) != 0 ? FR(Math.Round(num(0) / num(1), MidpointRounding.AwayFromZero) * num(1)) : FormulaResult.Error("#NUM!"), "ROMAN" => FR_S(ToRoman((int)num(0))), "ARABIC" => FR(FromRoman(str(0))), "BASE" => FR_S(Convert.ToString((long)num(0), (int)num(1)).ToUpperInvariant()),