diff options
Diffstat (limited to 'calc.go')
-rw-r--r-- | calc.go | 37 |
1 files changed, 16 insertions, 21 deletions
@@ -700,19 +700,19 @@ func formulaCriteriaParser(exp string) (fc *formulaCriteria) { fc.Type, fc.Condition = criteriaEq, match[1] return } - if match := regexp.MustCompile(`^<(.*)$`).FindStringSubmatch(exp); len(match) > 1 { + if match := regexp.MustCompile(`^<=(.*)$`).FindStringSubmatch(exp); len(match) > 1 { fc.Type, fc.Condition = criteriaLe, match[1] return } - if match := regexp.MustCompile(`^>(.*)$`).FindStringSubmatch(exp); len(match) > 1 { + if match := regexp.MustCompile(`^>=(.*)$`).FindStringSubmatch(exp); len(match) > 1 { fc.Type, fc.Condition = criteriaGe, match[1] return } - if match := regexp.MustCompile(`^<=(.*)$`).FindStringSubmatch(exp); len(match) > 1 { + if match := regexp.MustCompile(`^<(.*)$`).FindStringSubmatch(exp); len(match) > 1 { fc.Type, fc.Condition = criteriaL, match[1] return } - if match := regexp.MustCompile(`^>=(.*)$`).FindStringSubmatch(exp); len(match) > 1 { + if match := regexp.MustCompile(`^>(.*)$`).FindStringSubmatch(exp); len(match) > 1 { fc.Type, fc.Condition = criteriaG, match[1] return } @@ -732,8 +732,11 @@ func formulaCriteriaParser(exp string) (fc *formulaCriteria) { // formulaCriteriaEval evaluate formula criteria expression. func formulaCriteriaEval(val string, criteria *formulaCriteria) (result bool, err error) { var value, expected float64 + var e error var prepareValue = func(val, cond string) (value float64, expected float64, err error) { - value, _ = strconv.ParseFloat(val, 64) + if value, err = strconv.ParseFloat(val, 64); err != nil { + return + } if expected, err = strconv.ParseFloat(criteria.Condition, 64); err != nil { return } @@ -743,25 +746,17 @@ func formulaCriteriaEval(val string, criteria *formulaCriteria) (result bool, er case criteriaEq: return val == criteria.Condition, err case criteriaLe: - if value, expected, err = prepareValue(val, criteria.Condition); err != nil { - return - } - return value <= expected, err + value, expected, e = prepareValue(val, criteria.Condition) + return value <= expected && e == nil, err case criteriaGe: - if value, expected, err = prepareValue(val, criteria.Condition); err != nil { - return - } - return value >= expected, err + value, expected, e = prepareValue(val, criteria.Condition) + return value >= expected && e == nil, err case criteriaL: - if value, expected, err = prepareValue(val, criteria.Condition); err != nil { - return - } - return value < expected, err + value, expected, e = prepareValue(val, criteria.Condition) + return value < expected && e == nil, err case criteriaG: - if value, expected, err = prepareValue(val, criteria.Condition); err != nil { - return - } - return value > expected, err + value, expected, e = prepareValue(val, criteria.Condition) + return value > expected && e == nil, err case criteriaBeg: return strings.HasPrefix(val, criteria.Condition), err case criteriaEnd: |