1 Star 0 Fork 2

王布衣 / num

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
type_int32.go 1.96 KB
一键复制 编辑 原始数据 按行查看 历史
package num
import (
"fmt"
"gitee.com/quant1x/gox/logger"
"gitee.com/quant1x/num/x32"
"gitee.com/quant1x/num/x64"
"math"
"strconv"
)
const (
MaxInt32 = int32(math.MaxInt32)
MinInt32 = int32(math.MinInt32)
Nil2Int32 = int32(0) // 空指针转int32
Int32NaN = int32(0) // int32 无效值
True2Int32 = int32(1) // true转int32
False2Int32 = int32(0) // false 转int32
StringBad2Int32 = int32(0) // 字符串解析int32异常
StringTrue2Int32 = int32(1) // 字符串true转int32
StringFalse2Int32 = int32(0) // 字符串false转int32
)
// ParseInt32 解析int字符串, 尝试解析10进制和16进制
func ParseInt32(s string, v any) int32 {
defer func() {
// 解析失败以后输出日志, 以备检查
if err := recover(); err != nil {
logger.Errorf("ParseInt32 %+v, error=%+v\n", v, err)
}
}()
if IsEmpty(s) {
return Nil2Int32
}
if StringIsTrue(s) {
return StringTrue2Int32
} else if StringIsFalse(s) {
return StringFalse2Int32
}
if StringIsNaN(s) {
return StringFalse2Int32
}
i, err := strconv.ParseInt(s, 10, 32)
if err == nil {
return int32(i)
}
// 解析失败继续解析16进制
i, err = strconv.ParseInt(s, 16, 32)
if err == nil {
return int32(i)
}
logger.Errorf("%s, error=%+v\n", s, err)
if IgnoreParseExceptions {
i = int64(StringBad2Int32)
} else {
_ = v.(int32) // Intentionally panic
}
return int32(i)
}
func int32ToString(v int32) string {
if Float64IsNaN(float64(v)) {
return StringNaN
}
return fmt.Sprint(v)
}
// AnyToInt32 any转换int32
func AnyToInt32(v any) int32 {
if vv, ok := ExtractValueFromPointer(v); ok {
v = vv
}
f := valueToNumber[int32](v, Nil2Int32, BoolToInt32, ParseInt32)
return f
}
// SliceFloatToInt32 浮点转int32
func SliceFloatToInt32[T Float](x []T) []int32 {
switch values := any(x).(type) {
case []float32:
return x32.ToInt32(values)
case []float64:
return x64.ToInt32(values)
}
// 不可能走到这里
return []int32{}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/quant1x/num.git
git@gitee.com:quant1x/num.git
quant1x
num
num
v0.3.2

搜索帮助

344bd9b3 5694891 D2dac590 5694891