# Mathutil

mathutil 包实现了一些数学计算的函数.

# 源码:

# 用法:

import (
    "github.com/duke-git/lancet/v2/mathutil"
)

# Documentation

# Average

计算平均数. 可能需要对结果调用RoundToFloat方法四舍五入

函数签名:

func Average[T lancetconstraints.Number](numbers ...T) T

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Average(0, 0)) //0
	fmt.Println(mathutil.Average(1, 1)) //1
	avg := mathutil.Average(1.2, 1.4) //1.2999999998
	roundAvg := mmathutil.RoundToFloat(avg, 1) // 1.3
}

# Exponent

指数计算(x的n次方)

函数签名:

func Exponent(x, n int64) int64

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Exponent(10, 0)) //1
	fmt.Println(mathutil.Exponent(10, 1)) //10
	fmt.Println(mathutil.Exponent(10, 2)) //100
}

# Fibonacci

计算斐波那契数列的第n个数

函数签名:

func Fibonacci(first, second, n int) int

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Fibonacci(1, 1, 1)) //1
	fmt.Println(mathutil.Fibonacci(1, 1, 2)) //1
	fmt.Println(mathutil.Fibonacci(1, 1, 3)) //2
	fmt.Println(mathutil.Fibonacci(1, 1, 4)) //3
	fmt.Println(mathutil.Fibonacci(1, 1, 5)) //5
}

# Factorial

计算阶乘

函数签名:

func Factorial(x uint) uint

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Factorial(0)) //1
	fmt.Println(mathutil.Factorial(1)) //1
	fmt.Println(mathutil.Factorial(2)) //2
	fmt.Println(mathutil.Factorial(3)) //6
}

# Max

返回参数中的最大数

函数签名:

func Max[T lancetconstraints.Number](numbers ...T) T

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Max(0, 0)) //0
	fmt.Println(mathutil.Max(1, 2, 3)) //3
	fmt.Println(mathutil.Max(1.2, 1.4, 1.1, 1.4)) //1.4
}

# MaxBy

使用给定的比较器函数返回切片的最大值

函数签名:

func MaxBy[T any](slice []T, comparator func(T, T) bool) T

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	res1 := mathutil.MaxBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool {
		return len(v1) > len(v2)
	})
	fmt.Println(res1) //abc

	res2 := mathutil.MaxBy([]string{"abd", "abc", "ab"}, func(v1, v2 string) bool {
		return len(v1) > len(v2)
	})
	fmt.Println(res2) //abd

	res3 := mathutil.MaxBy([]string{}, func(v1, v2 string) bool {
		return len(v1) > len(v2)
	})
	fmt.Println(res3) //“”
}

# Min

返回参数中的最小数

函数签名:

func Min[T lancetconstraints.Number](numbers ...T) T

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Min(0, 0)) //0
	fmt.Println(mathutil.Min(1, 2, 3)) //1
	fmt.Println(mathutil.Min(1.2, 1.4, 1.1, 1.4)) //1.1
}

# MinBy

使用给定的比较器函数返回切片的最小值

函数签名:

func MinBy[T any](slice []T, comparator func(T, T) bool) T

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	res1 := mathutil.MinBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool {
		return len(v1) < len(v2)
	})
	fmt.Println(res1) //a

	res2 := mathutil.MinBy([]string{"ab", "ac", "abc"}, func(v1, v2 string) bool {
		return len(v1) < len(v2)
	})
	fmt.Println(res2) //ab

	res3 := mathutil.MinBy([]string{}, func(v1, v2 string) bool {
		return len(v1) < len(v2)
	})
	fmt.Println(res3) //“”
}

# Percent

计算百分比,保留n位小数

函数签名:

func Percent(val, total float64, n int) float64

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.Percent(1, 2, 2)) //1
	fmt.Println(mathutil.Percent(0.1, 0.3, 2)) //33.33
}

# RoundToFloat

四舍五入,保留n位小数

函数签名:

func RoundToFloat(x float64, n int) float64

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.RoundToFloat(0, 0)) //0
	fmt.Println(mathutil.RoundToFloat(0, 1)) //0
	fmt.Println(mathutil.RoundToFloat(0.124, 2)) //0.12
	fmt.Println(mathutil.RoundToFloat(0.125, 2)) //0.13
	fmt.Println(mathutil.RoundToFloat(0.125, 3)) //0.125
}

# RoundToString

四舍五入,保留n位小数,返回字符串

函数签名:

func RoundToString(x float64, n int) string

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.RoundToString(0, 0)) //"0"
	fmt.Println(mathutil.RoundToString(0, 1)) //"0.0:
	fmt.Println(mathutil.RoundToString(0.124, 2)) //"0.12"
	fmt.Println(mathutil.RoundToString(0.125, 2)) //"0.13"
	fmt.Println(mathutil.RoundToString(0.125, 3)) //"0.125"
}

# TruncRound

截短n位小数(不进行四舍五入)

函数签名:

func TruncRound(x float64, n int) float64

例子:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/mathutil"
)

func main() {
	fmt.Println(mathutil.TruncRound(0, 0)) //0
	fmt.Println(mathutil.TruncRound(0, 1)) //0
	fmt.Println(mathutil.TruncRound(0.124, 2)) //0.12
	fmt.Println(mathutil.TruncRound(0.125, 2)) //0.12
	fmt.Println(mathutil.TruncRound(0.125, 3)) //0.125
}
最后更新时间: 2022/9/29 下午1:53:14