From 684603befa0fbde2ee8db704e37a544f9d92d99d Mon Sep 17 00:00:00 2001 From: xuri Date: Mon, 6 Sep 2021 00:01:42 +0800 Subject: This closes #993, closes #1014 - Fix formula percentages calculated incorrectly - Make UpdateLinkedValue skip macro sheet - Fix conditional format bottom N not working --- calc.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'calc.go') diff --git a/calc.go b/calc.go index 5661d7d..ef8d0b0 100644 --- a/calc.go +++ b/calc.go @@ -975,6 +975,11 @@ func isOperatorPrefixToken(token efp.Token) bool { return (token.TValue == "-" && token.TType == efp.TokenTypeOperatorPrefix) || (ok && token.TType == efp.TokenTypeOperatorInfix) } +// isOperand determine if the token is parse operand perand. +func isOperand(token efp.Token) bool { + return token.TType == efp.TokenTypeOperand && (token.TSubType == efp.TokenSubTypeNumber || token.TSubType == efp.TokenSubTypeText) +} + // getDefinedNameRefTo convert defined name to reference range. func (f *File) getDefinedNameRefTo(definedNameName string, currentSheet string) (refTo string) { var workbookRefTo, worksheetRefTo string @@ -1034,8 +1039,15 @@ func (f *File) parseToken(sheet string, token efp.Token, opdStack, optStack *Sta } optStack.Pop() } + if token.TType == efp.TokenTypeOperatorPostfix && !opdStack.Empty() { + topOpd := opdStack.Pop().(efp.Token) + opd, err := strconv.ParseFloat(topOpd.TValue, 64) + topOpd.TValue = strconv.FormatFloat(opd/100, 'f', -1, 64) + opdStack.Push(topOpd) + return err + } // opd - if token.TType == efp.TokenTypeOperand && (token.TSubType == efp.TokenSubTypeNumber || token.TSubType == efp.TokenSubTypeText) { + if isOperand(token) { opdStack.Push(token) } return nil -- cgit v1.2.1