|
|
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"github.com/shopspring/decimal"
|
|
|
|
|
|
"math"
|
|
|
|
|
|
"math/rand"
|
|
|
|
|
|
"testing"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
// 初始化rand模块的Seed,要不然所有的随机值会一样~
|
|
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取随机float64 保留2位小数 Notice 不四舍五入
|
|
|
|
|
|
func GetRandomFloat64(min, max float64) float64 {
|
|
|
|
|
|
min, max = math.Abs(min), math.Abs(max)
|
|
|
|
|
|
min, max = GetMinFloat64WHW(min, max), GetMaxFloat64WHW(min, max)
|
|
|
|
|
|
// 到这里确保 max>=min 并且二者一定是正数
|
|
|
|
|
|
ret := GetMinFloat64WHW(min, max) + rand.Float64()*(max-min)
|
|
|
|
|
|
// 不四舍五入
|
|
|
|
|
|
ret, _ = decimal.NewFromFloat(ret).RoundFloor(2).Float64()
|
|
|
|
|
|
if ret > max {
|
|
|
|
|
|
ret = max
|
|
|
|
|
|
}
|
|
|
|
|
|
if ret < min {
|
|
|
|
|
|
ret = min
|
|
|
|
|
|
}
|
|
|
|
|
|
return ret
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetMaxFloat64WHW(min, max float64) float64 {
|
|
|
|
|
|
if min >= max {
|
|
|
|
|
|
return min
|
|
|
|
|
|
}
|
|
|
|
|
|
return max
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetMinFloat64WHW(min, max float64) float64 {
|
|
|
|
|
|
if min <= max {
|
|
|
|
|
|
return min
|
|
|
|
|
|
}
|
|
|
|
|
|
return max
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func TestRandFloat64222(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println(GetRandomFloat64(1, 2))
|
|
|
|
|
|
fmt.Println(GetRandomFloat64(-1.2233, 2.123))
|
|
|
|
|
|
fmt.Println(GetRandomFloat64(3.2, 2))
|
|
|
|
|
|
fmt.Println(GetRandomFloat64(0.01, 0.1))
|
|
|
|
|
|
fmt.Println(GetRandomFloat64(-0.01, 0.1))
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 随机数
|
|
|
|
|
|
// 生成min与max之间的整数(包含)
|
|
|
|
|
|
func GenRandomInt(min, max int) int {
|
|
|
|
|
|
if min == max {
|
|
|
|
|
|
return min
|
|
|
|
|
|
}
|
|
|
|
|
|
// 为了保险取两个值之间大的那个作为max
|
|
|
|
|
|
randNum := rand.Intn(GetMaxInt(min, max)-min) + min
|
|
|
|
|
|
return randNum
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetMaxInt(min, max int) int {
|
|
|
|
|
|
if max >= min {
|
|
|
|
|
|
return max
|
|
|
|
|
|
}
|
|
|
|
|
|
return min
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetMinInt(min, max int) int {
|
|
|
|
|
|
if min <= max {
|
|
|
|
|
|
return min
|
|
|
|
|
|
}
|
|
|
|
|
|
return max
|
|
|
|
|
|
}
|