# Golang : Round float to precision example

Tags :

Just an add on for my previous tutorial on how to round up or down a float number. For this short tutorial, we will learn how to round float numbers to certain precision.

`````` fmt.Printf("%0.2f \n", f)

fmt.Printf("%0.2f \n", Round(f)) // round half

fmt.Printf("%0.2f \n", RoundUp(f, 2)) // change 2 to 5 will have no effect

fmt.Printf("%0.2f \n", RoundDown(f, 3))  // change 3 to 4 will have no effect
``````

which will output the precision up to 2 decimal point no matter how you instruct the Round, RoundUp and RoundDown functions.

This is because of `fmt.Printf(%0.2\n)` will always overrule the final display format.

To fix this problem or to display the precision properly, you will have to use `fmt.Println()` instead.

`````` var f float64 = 123.123456

fmt.Printf("%0.2f \n", f)

fmt.Println(Round(f)) // round half

fmt.Println(RoundUp(f, 4)) // up to precision 4

fmt.Println(RoundDown(f, 4)) // up to precision 4
``````

Output :

123.12

123

123.1235

123.1234

Here's the full code :

`````` package main

import (
"fmt"
"math"
)

func Round(input float64) float64 {
if input < 0 {
return math.Ceil(input - 0.5)
}
return math.Floor(input + 0.5)
}

func RoundUp(input float64, places int) (newVal float64) {
var round float64
pow := math.Pow(10, float64(places))
digit := pow * input
round = math.Ceil(digit)
newVal = round / pow
return
}

func RoundDown(input float64, places int) (newVal float64) {
var round float64
pow := math.Pow(10, float64(places))
digit := pow * input
round = math.Floor(digit)
newVal = round / pow
return
}

func main() {
var f float64 = 123.123456

fmt.Printf("%0.2f \n", f)

fmt.Println(Round(f)) // round half

fmt.Println(RoundUp(f, 4))

fmt.Println(RoundDown(f, 4))
}
``````

Reference :

https://www.socketloop.com/tutorials/golang-display-float-in-2-decimal-points-and-rounding-up-or-down

Tags :