feat: maths 新增 MakeLastDigitsZero 函数,用于将传入数字的末位 n 位设置为 0
This commit is contained in:
parent
f3ae5a3957
commit
f060af2b7d
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue