Number Utilities
Overview
The utils package provides a Number type that simulates TypeScript/JavaScript's number type, handling both integers and floating-point numbers uniformly using float64 internally.
Number Type
go
type Number struct {
value float64
}API Reference
ParseNumber(raw string) (*Number, error)
Parses a string into a *Number. Handles both integer ("100") and floating-point ("100.5") formats.
go
num, err := utils.ParseNumber("42")
if err != nil {
log.Fatal(err)
}
fmt.Println(num.Float()) // 42(n *Number) Float() float64
Returns the underlying float64 value.
go
num, _ := utils.ParseNumber("123.456")
fmt.Println(num.Float()) // 123.456(n *Number) Int() int
Returns the integer part of the number (truncates the decimal part).
go
num, _ := utils.ParseNumber("99.9")
fmt.Println(num.Int()) // 99(n *Number) Int64() int64
Returns the integer part as int64.
go
num, _ := utils.ParseNumber("9999999999.5")
fmt.Println(num.Int64()) // 9999999999(n *Number) IsInteger() bool
Checks if the number is an integer (has no decimal part).
go
num1, _ := utils.ParseNumber("10.0")
num2, _ := utils.ParseNumber("10.5")
fmt.Println(num1.IsInteger()) // true
fmt.Println(num2.IsInteger()) // falseExample
go
package main
import (
"fmt"
"github.com/leoheung/go-patterns/utils"
)
func main() {
// Parse various number formats
examples := []string{"42", "3.14", "100.0", "99.99", "-5"}
for _, s := range examples {
num, err := utils.ParseNumber(s)
if err != nil {
fmt.Printf("Error parsing %s: %v\n", s, err)
continue
}
fmt.Printf("Input: %s\n", s)
fmt.Printf(" Float: %f\n", num.Float())
fmt.Printf(" Int: %d\n", num.Int())
fmt.Printf(" Int64: %d\n", num.Int64())
fmt.Printf(" IsInteger: %v\n", num.IsInteger())
fmt.Println()
}
}Notes
- Internally uses
float64to match JavaScript/TypeScript behavior - Integer conversion truncates the decimal part (doesn't round)
IsInteger()compares withmath.Trunc()for precision- String parsing uses
strconv.ParseFloatwith 64-bit precision