diff options
author | xuri <xuri.me@gmail.com> | 2021-09-06 00:01:42 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2021-09-06 00:01:42 +0800 |
commit | 684603befa0fbde2ee8db704e37a544f9d92d99d (patch) | |
tree | 1b9318e7e008b78de5bb2b9342abd6290f67e408 /calc.go | |
parent | 32b23ef42d3ecb393e102c5f63ab5125db354435 (diff) |
This closes #993, closes #1014
- Fix formula percentages calculated incorrectly
- Make UpdateLinkedValue skip macro sheet
- Fix conditional format bottom N not working
Diffstat (limited to 'calc.go')
-rw-r--r-- | calc.go | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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 |