summaryrefslogtreecommitdiff
path: root/round.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-05-21 15:02:35 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-05-21 15:02:35 +0200
commit64a507e2f19fc1ed9dab7f8123b334067d107533 (patch)
tree28d554b5e5539f76632699bcffe559445eae17d0 /round.go
initial import
Diffstat (limited to 'round.go')
-rw-r--r--round.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/round.go b/round.go
new file mode 100644
index 0000000..89725f2
--- /dev/null
+++ b/round.go
@@ -0,0 +1,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)
+}