summaryrefslogtreecommitdiff
path: root/round.go
blob: 89725f26a841563966de0fbfa1312f17775a4c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package float

import "math"

// ISO 80000-1:2012
// q =  \sgn(y) \left\lfloor \left| y \right| + 0.5 \right\rfloor
//   = -\sgn(y) \left\lceil -\left| y \right| - 0.5 \right\rceil

func round(v float64, places int) float64 {
	scale := math.Pow(10, float64(places))
	abs := math.Abs(v*scale) + 0.5
	return math.Copysign(math.Floor(abs)/scale, v)
}

// Round a float value to 2 decimal places
func Round(v float64) float64 {
	return round(v, 2)
}