mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-09 15:12:26 +08:00
feat: add new functions to mathutil package
This commit is contained in:
@@ -91,6 +91,34 @@ func TruncRound(x float64, n int) float64 {
|
||||
return res
|
||||
}
|
||||
|
||||
// FloorToFloat round down to n decimal places.
|
||||
func FloorToFloat(x float64, n int) float64 {
|
||||
return math.Floor(x*math.Pow(10, float64(n))) / math.Pow(10.0, float64(n))
|
||||
}
|
||||
|
||||
// FloorToString round down to n decimal places.
|
||||
func FloorToString(x float64, n int) string {
|
||||
tmp := math.Pow(10.0, float64(n))
|
||||
x *= tmp
|
||||
x = math.Floor(x)
|
||||
res := strconv.FormatFloat(x/tmp, 'f', n, 64)
|
||||
return res
|
||||
}
|
||||
|
||||
// CeilToFloat round up to n decimal places.
|
||||
func CeilToFloat(x float64, n int) float64 {
|
||||
pow10n := math.Pow10(n)
|
||||
return math.Ceil(x*pow10n) / pow10n
|
||||
}
|
||||
|
||||
// CeilToString round up to n decimal places.
|
||||
func CeilToString(x float64, n int) string {
|
||||
multiplier := math.Pow(10, float64(n))
|
||||
rounded := math.Ceil(x*multiplier) / multiplier
|
||||
|
||||
return fmt.Sprintf("%.*f", n, rounded)
|
||||
}
|
||||
|
||||
// AngleToRadian converts angle value to radian value.
|
||||
func AngleToRadian(angle float64) float64 {
|
||||
radian := angle * (math.Pi / 180)
|
||||
|
||||
@@ -180,3 +180,46 @@ func TestLog(t *testing.T) {
|
||||
assert.EqualValues(3, TruncRound(Log(27, 3), 0))
|
||||
assert.EqualValues(2.32, TruncRound(Log(5, 2), 2))
|
||||
}
|
||||
|
||||
func TestFloorToFloat(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := internal.NewAssert(t, "TestFloorToFloat")
|
||||
|
||||
assert.Equal(3.14, FloorToFloat(3.14159, 2))
|
||||
assert.Equal(3.141, FloorToFloat(3.14159, 3))
|
||||
assert.Equal(5.0, FloorToFloat(5, 4))
|
||||
assert.Equal(2.0, FloorToFloat(9/4, 2))
|
||||
}
|
||||
|
||||
func TestFloorToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := internal.NewAssert(t, "TestFloorToString")
|
||||
|
||||
assert.Equal("3.14", FloorToString(3.14159, 2))
|
||||
assert.Equal("3.141", FloorToString(3.14159, 3))
|
||||
assert.Equal("5.0000", FloorToString(5, 4))
|
||||
}
|
||||
|
||||
func TestCeilToFloat(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := internal.NewAssert(t, "TestCeilToFloat")
|
||||
|
||||
assert.Equal(3.15, CeilToFloat(3.14159, 2))
|
||||
assert.Equal(3.142, CeilToFloat(3.14159, 3))
|
||||
assert.Equal(5.0, CeilToFloat(5, 4))
|
||||
assert.Equal(0.15, CeilToFloat(float64(1)/float64(7), 2))
|
||||
}
|
||||
|
||||
func TestCeilToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := internal.NewAssert(t, "TestCeilToFloat")
|
||||
|
||||
assert.Equal("3.15", CeilToString(3.14159, 2))
|
||||
assert.Equal("3.142", CeilToString(3.14159, 3))
|
||||
assert.Equal("5.0000", CeilToString(5, 4))
|
||||
assert.Equal("0.15", CeilToString(float64(1)/float64(7), 2))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user