Ce face math.Abs
math.Abs transformă un număr negativ în opusul lui și lasă neschimbat un număr pozitiv. math.Abs(-7.5) dă 7.5. O folosești când te interesează cât de mare este o diferență, nu în ce sens este.
Ca aproape toate funcțiile din pachetul math, primește și returnează float64. Pentru un int trebuie să faci conversia (math.Abs(float64(n))) sau să scrii o funcție mică: if n < 0 { n = -n }. Go nu are o funcție Abs pentru întregi în biblioteca standard.
Cazuri speciale: Abs(±Inf) dă +Inf, iar Abs(NaN) dă NaN.
Parametri
| Parametru | Descriere |
|---|---|
x |
Numărul (float64) al cărui modul vrei să-l afli. |
Ce returnează
Valoarea lui x fără semn, tot ca float64.
Exemple
Exemplul 1: Modulul câtorva numere
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Abs(-7.5))
fmt.Println(math.Abs(3))
fmt.Println(math.Abs(-0.25))
}
Rezultat
7.5
3
0.25
Exemplul 2: Diferența dintre două temperaturi
Nu contează care oraș are mai cald: math.Abs dă mereu o diferență pozitivă.
package main
import (
"fmt"
"math"
)
func main() {
iasi, cluj := -3.5, 2.0
fmt.Printf("Diferența Iași - Cluj: %.1f grade\n", math.Abs(iasi-cluj))
fmt.Printf("Diferența Cluj - Iași: %.1f grade\n", math.Abs(cluj-iasi))
}
Rezultat
Diferența Iași - Cluj: 5.5 grade
Diferența Cluj - Iași: 5.5 grade
Exemplul 3: Modulul unui întreg
Pentru int faci conversia la float64 și înapoi, sau scrii o funcție proprie.
package main
import (
"fmt"
"math"
)
func absInt(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
sold := -250
fmt.Println(int(math.Abs(float64(sold))))
fmt.Println(absInt(sold))
}
Rezultat
250
250
Greșeli frecvente
- Dai un
intdirect:math.Abs(n)cun intnu compilează (cannot use n (variable of type int) as float64 value). Fă conversia sau folosește o funcție pentru întregi. - Compari numere zecimale cu
==:0.1+0.2 == 0.3estefalse. Foloseștemath.Abs(a-b) < 1e-9.
Comenzi înrudite
math.Dim: math.Dim dă diferența pozitivă max(x-y, 0); math.Copysign copiază semnul; math.Signbit spune dacă un număr are semn minus.math.Max: math.Max returnează cel mai mare, iar math.Min cel mai mic dintre două numere float64.math.Floor: math.Floor rotunjește în jos, math.Ceil în sus, iar math.Trunc taie partea zecimală (spre zero).