diff --git a/CHANGELOG.md b/CHANGELOG.md index b4be6835..dbadec37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### [13.5.1](https://kaos.sh/ek/13.5.1) +- `[mathutil]` Added method `FromPerc` - `[mathutil]` Code refactoring ### [13.5.0](https://kaos.sh/ek/13.5.0) diff --git a/mathutil/example_test.go b/mathutil/example_test.go index 9cb5cd74..e0c8285d 100644 --- a/mathutil/example_test.go +++ b/mathutil/example_test.go @@ -83,6 +83,12 @@ func ExamplePerc() { // 30% } +func ExampleFromPerc() { + fmt.Printf("%g\n", FromPerc(15.0, 2860)) + // Output: + // 429 +} + func ExampleRound() { fmt.Println(Round(3.14159, 2)) // Output: diff --git a/mathutil/mathutil.go b/mathutil/mathutil.go index 09dea125..ff2795bd 100644 --- a/mathutil/mathutil.go +++ b/mathutil/mathutil.go @@ -130,6 +130,15 @@ func Perc[N Numeric](current, total N) float64 { return (float64(current) / float64(total)) * 100.0 } +// FromPerc calculates value from percentage +func FromPerc(perc float64, total float64) float64 { + if perc <= 0 || total == 0 { + return 0 + } + + return (total / 100.0) * perc +} + // Round returns rounded value func Round(v float64, p int) float64 { pow := math.Pow(10, float64(p)) diff --git a/mathutil/mathutil_test.go b/mathutil/mathutil_test.go index e8da32a0..818192df 100644 --- a/mathutil/mathutil_test.go +++ b/mathutil/mathutil_test.go @@ -68,3 +68,11 @@ func (s *MathUtilSuite) TestPerc(c *C) { c.Assert(Perc(100, 100), Equals, 100.0) c.Assert(Perc(200, 100), Equals, 200.0) } + +func (s *MathUtilSuite) TestFromPerc(c *C) { + c.Assert(FromPerc(0, 0), Equals, 0.0) + c.Assert(FromPerc(100, 0), Equals, 0.0) + c.Assert(FromPerc(-1, 1000), Equals, 0.0) + c.Assert(FromPerc(250, 100), Equals, 250.0) + c.Assert(FromPerc(25.55, -100), Equals, -25.55) +}