Ce face math.Mod
Operatorul % din Go merge doar pe întregi. Pentru numere zecimale folosești math.Mod(x, y): restul are semnul lui x și este mai mic decât y în valoare absolută. math.Mod(7.5, 2) este 1.5, math.Mod(-7, 3) este -1.
math.Remainder(x, y) calculează restul după standardul IEEE 754: x - n*y, unde n este câtul rotunjit la cel mai apropiat întreg. De aceea rezultatul poate fi negativ chiar pentru numere pozitive: Remainder(8, 3) este -1 (8/3 ≈ 2.67 se rotunjește la 3).
math.Modf(f) returnează două valori: partea întreagă și partea zecimală, ambele cu semnul lui f. math.Modf(3.75) dă 3 și 0.75.
Parametri
| Parametru | Descriere |
|---|---|
x, y |
Deîmpărțitul și împărțitorul. Dacă y este 0, rezultatul este NaN. |
f |
Pentru Modf: numărul despărțit. |
Ce returnează
Mod și Remainder: restul, ca float64. Modf: partea întreagă și partea zecimală.
Exemple
Exemplul 1: Mod față de Remainder
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Mod(7.5, 2))
fmt.Println(math.Mod(-7, 3))
fmt.Println(math.Remainder(7, 3))
fmt.Println(math.Remainder(8, 3))
fmt.Println(7 % 3, -7 % 3) // pentru întregi există operatorul %
}
Rezultat
1.5
-1
1
-1
1 -1
Exemplul 2: Ore și minute dintr-o durată zecimală
Modf separă orele întregi de fracțiunea de oră, pe care o transformi în minute.
package main
import (
"fmt"
"math"
)
func main() {
durata := 2.75 // ore
ore, fractiune := math.Modf(durata)
fmt.Printf("%.0f ore și %.0f minute\n", ore, fractiune*60)
intreg, zec := math.Modf(-3.25)
fmt.Println(intreg, zec)
}
Rezultat
2 ore și 45 minute
-3 -0.25
Greșeli frecvente
- Scrii
7.5 % 2: nu compilează,%nu este definit pentrufloat64. Foloseștemath.Mod. - Aștepți ca
Remaindersă fie mereu pozitiv: rezultatul este în intervalul [-y/2, y/2].
Comenzi înrudite
math.Floor: math.Floor rotunjește în jos, math.Ceil în sus, iar math.Trunc taie partea zecimală (spre zero).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.