feat: maths 新增 MakeLastDigitsZero 函数,用于将传入数字的末位 n 位设置为 0

This commit is contained in:
kercylan98 2023-12-04 14:00:30 +08:00
parent f3ae5a3957
commit f060af2b7d
3 changed files with 34 additions and 0 deletions

View File

@ -204,3 +204,14 @@ func IsOdd[V generic.Integer](n V) bool {
func IsEven[V generic.Integer](n V) bool {
return 0 == (int64(n) & 1)
}
// MakeLastDigitsZero 返回一个新的数,其中 num 的最后 digits 位数被设为零。
// - 函数首先创建一个 10 的 digits 次方的遮罩,然后通过整除和乘以这个遮罩来使 num 的最后 digits 位归零。
// - 当 T 类型为浮点型时,将被向下取整后再进行转换
func MakeLastDigitsZero[T generic.Number](num T, digits int) T {
var mask int64 = 1
for i := 0; i < digits; i++ {
mask *= 10
}
return T(int64(num) / mask * mask)
}

14
utils/maths/math_test.go Normal file
View File

@ -0,0 +1,14 @@
package maths_test
import (
"github.com/kercylan98/minotaur/utils/maths"
"github.com/kercylan98/minotaur/utils/random"
"testing"
)
func TestMakeLastDigitsZero(t *testing.T) {
for i := 0; i < 20; i++ {
n := float64(random.Int64(100, 999999))
t.Log(n, 3, maths.MakeLastDigitsZero(n, 3))
}
}

View File

@ -7,16 +7,25 @@ import (
// Int64 返回一个介于min和max之间的int64类型的随机数。
func Int64(min int64, max int64) int64 {
if min == max {
return min
}
return min + rand.Int63n(max+1-min)
}
// Int 返回一个介于min和max之间的的int类型的随机数。
func Int(min int, max int) int {
if min == max {
return min
}
return int(Int64(int64(min), int64(max)))
}
// Duration 返回一个介于min和max之间的的Duration类型的随机数。
func Duration(min int64, max int64) time.Duration {
if min == max {
return time.Duration(min)
}
return time.Duration(Int64(min, max))
}