1 Star 0 Fork 0

ixgo/ixUtils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
math.go 6.44 KB
一键复制 编辑 原始数据 按行查看 历史
lixu 提交于 2025-09-19 17:12 +08:00 . Initial commit
/*
* @Author: lixu lixu@puchigames.com
* @Date: 2025-09-18 10:05:00
* @LastEditors: lixu lixu@puchigames.com
* @LastEditTime: 2025-09-18 10:05:00
* @FilePath: /go-helper/utils/math.go
* @Description: 数学工具函数,包含基础数学运算、数值处理等功能
*/
package ixUtils
import (
"math"
)
// ========== 基础数学函数 ==========
// MaxInt 返回两个整数中的最大值
func MaxInt(a, b int) int {
if a > b {
return a
}
return b
}
// MinInt 返回两个整数中的最小值
func MinInt(a, b int) int {
if a < b {
return a
}
return b
}
// MaxInt64 返回两个64位整数中的最大值
func MaxInt64(a, b int64) int64 {
if a > b {
return a
}
return b
}
// MinInt64 返回两个64位整数中的最小值
func MinInt64(a, b int64) int64 {
if a < b {
return a
}
return b
}
// MaxFloat64 返回两个浮点数中的最大值
func MaxFloat64(a, b float64) float64 {
return math.Max(a, b)
}
// MinFloat64 返回两个浮点数中的最小值
func MinFloat64(a, b float64) float64 {
return math.Min(a, b)
}
// Max 泛型版本的最大值函数
func Max[T int | int64 | float64](a, b T) T {
if a > b {
return a
}
return b
}
// Min 泛型版本的最小值函数
func Min[T int | int64 | float64](a, b T) T {
if a < b {
return a
}
return b
}
// AbsInt 返回整数的绝对值
func AbsInt(n int) int {
if n < 0 {
return -n
}
return n
}
// AbsInt64 返回64位整数的绝对值
func AbsInt64(n int64) int64 {
if n < 0 {
return -n
}
return n
}
// AbsFloat64 返回浮点数的绝对值
func AbsFloat64(f float64) float64 {
return math.Abs(f)
}
// Abs 泛型版本的绝对值函数
func Abs[T int | int64 | float64](n T) T {
if n < 0 {
return -n
}
return n
}
// Round 四舍五入到指定精度
func Round(f float64, precision int) float64 {
ratio := math.Pow(10, float64(precision))
return math.Round(f*ratio) / ratio
}
// Ceil 向上取整
func Ceil(f float64) int {
return int(math.Ceil(f))
}
// Floor 向下取整
func Floor(f float64) int {
return int(math.Floor(f))
}
// ========== 数值处理函数 ==========
// InRangeInt 检查整数是否在指定范围内(包含边界)
func InRangeInt(value, min, max int) bool {
return value >= min && value <= max
}
// InRangeFloat64 检查浮点数是否在指定范围内(包含边界)
func InRangeFloat64(value, min, max float64) bool {
return value >= min && value <= max
}
// InRange 泛型版本的范围检查
func InRange[T int | int64 | float64](value, min, max T) bool {
return value >= min && value <= max
}
// ClampInt 将整数限制在指定范围内
func ClampInt(value, min, max int) int {
if value < min {
return min
}
if value > max {
return max
}
return value
}
// ClampFloat64 将浮点数限制在指定范围内
func ClampFloat64(value, min, max float64) float64 {
if value < min {
return min
}
if value > max {
return max
}
return value
}
// Clamp 泛型版本的数值限制
func Clamp[T int | int64 | float64](value, min, max T) T {
if value < min {
return min
}
if value > max {
return max
}
return value
}
// PercentageInt 计算整数百分比
func PercentageInt(part, total int) float64 {
if total == 0 {
return 0
}
return float64(part) / float64(total) * 100
}
// PercentageFloat64 计算浮点数百分比
func PercentageFloat64(part, total float64) float64 {
if total == 0 {
return 0
}
return part / total * 100
}
// Percentage 泛型版本的百分比计算
func Percentage[T int | int64 | float64](part, total T) float64 {
if total == 0 {
return 0
}
return float64(part) / float64(total) * 100
}
// AverageInt 计算整数数组的平均值
func AverageInt(numbers []int) float64 {
if len(numbers) == 0 {
return 0
}
var sum int
for _, num := range numbers {
sum += num
}
return float64(sum) / float64(len(numbers))
}
// AverageFloat64 计算浮点数数组的平均值
func AverageFloat64(numbers []float64) float64 {
if len(numbers) == 0 {
return 0
}
var sum float64
for _, num := range numbers {
sum += num
}
return sum / float64(len(numbers))
}
// Average 泛型版本的平均值计算
func Average[T int | int64 | float64](numbers []T) float64 {
if len(numbers) == 0 {
return 0
}
var sum T
for _, num := range numbers {
sum += num
}
return float64(sum) / float64(len(numbers))
}
// ========== 扩展数学函数 ==========
// SumInt 计算整数数组的总和
func SumInt(numbers []int) int {
var sum int
for _, num := range numbers {
sum += num
}
return sum
}
// SumFloat64 计算浮点数数组的总和
func SumFloat64(numbers []float64) float64 {
var sum float64
for _, num := range numbers {
sum += num
}
return sum
}
// Sum 泛型版本的求和
func Sum[T int | int64 | float64](numbers []T) T {
var sum T
for _, num := range numbers {
sum += num
}
return sum
}
// MaxSliceInt 返回整数数组中的最大值
func MaxSliceInt(numbers []int) int {
if len(numbers) == 0 {
return 0
}
max := numbers[0]
for _, num := range numbers[1:] {
if num > max {
max = num
}
}
return max
}
// MinSliceInt 返回整数数组中的最小值
func MinSliceInt(numbers []int) int {
if len(numbers) == 0 {
return 0
}
min := numbers[0]
for _, num := range numbers[1:] {
if num < min {
min = num
}
}
return min
}
// MaxSlice 泛型版本的数组最大值
func MaxSlice[T int | int64 | float64](numbers []T) T {
if len(numbers) == 0 {
var zero T
return zero
}
max := numbers[0]
for _, num := range numbers[1:] {
if num > max {
max = num
}
}
return max
}
// MinSlice 泛型版本的数组最小值
func MinSlice[T int | int64 | float64](numbers []T) T {
if len(numbers) == 0 {
var zero T
return zero
}
min := numbers[0]
for _, num := range numbers[1:] {
if num < min {
min = num
}
}
return min
}
// PowerInt 整数幂运算
func PowerInt(base, exp int) int {
if exp == 0 {
return 1
}
if exp == 1 {
return base
}
result := 1
for i := 0; i < exp; i++ {
result *= base
}
return result
}
// PowerFloat64 浮点数幂运算
func PowerFloat64(base, exp float64) float64 {
return math.Pow(base, exp)
}
// Sqrt 平方根
func Sqrt(f float64) float64 {
return math.Sqrt(f)
}
// IsEven 检查是否为偶数
func IsEven(n int) bool {
return n%2 == 0
}
// IsOdd 检查是否为奇数
func IsOdd(n int) bool {
return n%2 != 0
}
// GCD 计算最大公约数
func GCD(a, b int) int {
for b != 0 {
a, b = b, a%b
}
return a
}
// LCM 计算最小公倍数
func LCM(a, b int) int {
return a * b / GCD(a, b)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ixgo/utils.git
git@gitee.com:ixgo/utils.git
ixgo
utils
ixUtils
v1.0.3

搜索帮助