summaryrefslogtreecommitdiff
path: root/calc.go
diff options
context:
space:
mode:
Diffstat (limited to 'calc.go')
-rw-r--r--calc.go37
1 files changed, 16 insertions, 21 deletions
diff --git a/calc.go b/calc.go
index 54683a8..7b9785c 100644
--- a/calc.go
+++ b/calc.go
@@ -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: