代码拉取完成,页面将自动刷新
/*
* @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)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。