math.Floor în Go

math.Floor rotunjește în jos, math.Ceil în sus, iar math.Trunc taie partea zecimală (spre zero).

Sintaxă
import "math"

func Floor(x float64) float64
func Ceil(x float64) float64
func Trunc(x float64) float64

Ce face math.Floor

math.Floor(x) returnează cel mai mare întreg mai mic sau egal cu x (rotunjire în jos). math.Ceil(x) returnează cel mai mic întreg mai mare sau egal cu x (rotunjire în sus). math.Trunc(x) șterge zecimalele, adică rotunjește spre zero.

Diferența apare la numerele negative: Floor(-2.7) este -3, dar Trunc(-2.7) este -2. Conversia int(x) se comportă ca Trunc.

Toate returnează tot float64. Dacă ai nevoie de întreg, faci conversia după rotunjire: int(math.Ceil(x)).

Parametri

Parametru Descriere
x Numărul de rotunjit.

Ce returnează

Un float64 cu valoare întreagă.

Exemple

Exemplul 1: Floor, Ceil și Trunc pe aceleași numere

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println("x      Floor  Ceil  Trunc")
    for _, x := range []float64{2.3, 2.7, -2.3, -2.7} {
        fmt.Printf("%-6v %-6v %-5v %v\n", x, math.Floor(x), math.Ceil(x), math.Trunc(x))
    }
}

Rezultat

x      Floor  Ceil  Trunc
2.3    2      3     2
2.7    2      3     2
-2.3   -3     -2    -2
-2.7   -3     -2    -2

Exemplul 2: Câte mașini trebuie pentru o excursie

Pentru 23 de elevi și 4 locuri pe mașină ai nevoie de 6 mașini: rotunjești în sus cu Ceil.

package main

import (
    "fmt"
    "math"
)

func main() {
    elevi, locuri := 23, 4
    masini := int(math.Ceil(float64(elevi) / float64(locuri)))
    fmt.Println("Mașini necesare:", masini)

    pagini := int(math.Ceil(57.0 / 10.0))
    fmt.Println("Pagini de rezultate:", pagini)
}

Rezultat

Mașini necesare: 6
Pagini de rezultate: 6

Greșeli frecvente

  • Împarți doi întregi înainte de Ceil: math.Ceil(float64(23 / 4)) dă 5, pentru că 23 / 4 este deja 5. Convertește fiecare operand la float64.
  • Folosești Floor pe numere negative când voiai doar să tai zecimalele: pentru asta există Trunc.

Comenzi înrudite

  • math.Round: math.Round rotunjește la cel mai apropiat întreg (jumătățile se duc departe de zero); RoundToEven duce jumătățile la par.
  • math.Mod: math.Mod și math.Remainder dau restul împărțirii pentru float64; math.Modf desparte un număr în parte întreagă și zecimală.
  • math.Abs: Returnează valoarea absolută (modulul) unui număr float64: distanța lui față de zero, fără semn.