增加handle format的单元测试以及修复float处理的BUG

This commit is contained in:
2024-05-01 23:17:14 +08:00
parent 5e15a7ffc8
commit 867ff22e6d
4 changed files with 105 additions and 20 deletions

View File

@ -12,6 +12,7 @@ import (
"git.zhangdeman.cn/gateway/validator/define"
"git.zhangdeman.cn/zhangdeman/util"
"git.zhangdeman.cn/zhangdeman/wrapper"
"strconv"
)
// handleFloat 处理float数据
@ -27,20 +28,20 @@ func handleFloat(inputVal any, rule *define.FieldRule) (float64, error) {
if err = util.ConvertAssign(&formatData, inputVal); nil != err {
return 0, err
}
if !rule.AllowZero {
if !rule.AllowZero && formatData == 0 {
return 0, fmt.Errorf("%v : field type is float, but zero val is not allowed", rule.Path)
}
if nil == rule.ValueLimit {
return formatData, nil
}
if nil != rule.ValueLimit.Min && formatData < *rule.ValueLimit.Min {
return 0, fmt.Errorf("%v : field type is float, min val is %v, real val is %v", rule.Path, *rule.ValueLimit.Min, formatData)
return 0, fmt.Errorf("%v : field type is float, min val is [%v], real val is [%v]", rule.Path, *rule.ValueLimit.Min, formatData)
}
if nil != rule.ValueLimit.Max && formatData > *rule.ValueLimit.Max {
return 0, fmt.Errorf("%v : field type is float, max val is %v, real val is %v", rule.Path, *rule.ValueLimit.Max, formatData)
}
if len(rule.ValueLimit.EnumList) > 0 {
if wrapper.ArrayType(rule.ValueLimit.EnumList).Has(formatData) < 0 {
if wrapper.ArrayType(rule.ValueLimit.EnumList).Has(strconv.FormatFloat(formatData, 'f', -1, 64)) < 0 {
return 0, fmt.Errorf("%v : field type is float, real val is %v, is not in enum list", rule.Path, formatData)
}
}