math.Round în Go

math.Round rotunjește la cel mai apropiat întreg (jumătățile se duc departe de zero); RoundToEven duce jumătățile la par.

Sintaxă
import "math"

func Round(x float64) float64
func RoundToEven(x float64) float64

Ce face math.Round

math.Round(x) rotunjește la cel mai apropiat întreg. Când x este exact la jumătate (2.5, -2.5), rotunjește departe de zero: Round(2.5) este 3, Round(-2.5) este -3. Este rotunjirea învățată la școală.

math.RoundToEven(x) trimite jumătățile spre numărul par cel mai apropiat: RoundToEven(2.5) este 2, RoundToEven(3.5) este 4. Se numește „rotunjirea bancherului” și evită ca o sumă mare de valori rotunjite să crească sistematic.

Ambele rotunjesc la întreg. Pentru două zecimale înmulțești cu 100, rotunjești și împarți cu 100. Dacă vrei doar să afișezi cu două zecimale, folosește fmt.Printf("%.2f", x).

Parametri

Parametru Descriere
x Numărul de rotunjit.

Ce returnează

Întregul cel mai apropiat, ca float64.

Exemple

Exemplul 1: Round față de RoundToEven

package main

import (
    "fmt"
    "math"
)

func main() {
    for _, x := range []float64{2.4, 2.5, 3.5, -2.5, 2.6} {
        fmt.Printf("%5v  Round = %3v  RoundToEven = %v\n", x, math.Round(x), math.RoundToEven(x))
    }
}

Rezultat

  2.4  Round =   2  RoundToEven = 2
  2.5  Round =   3  RoundToEven = 2
  3.5  Round =   4  RoundToEven = 4
 -2.5  Round =  -3  RoundToEven = -2
  2.6  Round =   3  RoundToEven = 3

Exemplul 2: Media notelor, rotunjită

Media 8.5 se rotunjește la 9 cu Round. Pentru două zecimale înmulțești, rotunjești și împarți.

package main

import (
    "fmt"
    "math"
)

func main() {
    note := []float64{9, 8, 10, 7}
    suma := 0.0
    for _, n := range note {
        suma += n
    }
    media := suma / float64(len(note))
    fmt.Println("Media:", media)
    fmt.Println("Nota finală:", math.Round(media))
    fmt.Println("Preț:", math.Round(19.987*100)/100, "lei")
}

Rezultat

Media: 8.5
Nota finală: 9
Preț: 19.99 lei

Greșeli frecvente

  • Folosești int(x + 0.5) pentru rotunjire: pe numere negative greșește (int(-2.7 + 0.5) este -2, nu -3). Folosește math.Round.
  • Rotunjești valoarea doar ca s-o afișezi frumos: e mai simplu fmt.Printf("%.2f", x), iar valoarea exactă rămâne pentru calcule.

Comenzi înrudite

  • math.Floor: math.Floor rotunjește în jos, math.Ceil în sus, iar math.Trunc taie partea zecimală (spre zero).
  • math.Pow: math.Pow ridică x la puterea y, iar math.Pow10 calculează 10 la puterea n.