github.com/tursom/GoCollections@v0.3.10/lang/Float64.go (about)

     1  /*
     2   * Copyright (c) 2022 tursom. All rights reserved.
     3   * Use of this source code is governed by a GPL-3
     4   * license that can be found in the LICENSE file.
     5   */
     6  
     7  package lang
     8  
     9  import (
    10  	"fmt"
    11  )
    12  
    13  type Float64 float64
    14  
    15  func CastFloat64(v any) (float64, bool) {
    16  	switch i := v.(type) {
    17  	case int:
    18  		return float64(i), true
    19  	case int8:
    20  		return float64(i), true
    21  	case int16:
    22  		return float64(i), true
    23  	case int32:
    24  		return float64(i), true
    25  	case int64:
    26  		return float64(i), true
    27  	case uint:
    28  		return float64(i), true
    29  	case uint8:
    30  		return float64(i), true
    31  	case uint16:
    32  		return float64(i), true
    33  	case uint32:
    34  		return float64(i), true
    35  	case uint64:
    36  		return float64(i), true
    37  	case float32:
    38  		return float64(i), true
    39  	case float64:
    40  		return i, true
    41  	case Number:
    42  		return i.ToFloat64().V(), true
    43  	default:
    44  		return 0, false
    45  	}
    46  }
    47  
    48  func EqualsFloat64(i1 Number, i2 any) bool {
    49  	i2, ok := CastFloat64(i2)
    50  	return ok && i2 == i1.ToFloat64().V()
    51  }
    52  
    53  func (i Float64) V() float64 {
    54  	return float64(i)
    55  }
    56  
    57  func (i Float64) String() string {
    58  	return fmt.Sprint(float64(i))
    59  }
    60  
    61  func (i Float64) AsObject() Object {
    62  	return i
    63  }
    64  
    65  func (i Float64) Equals(e Object) bool {
    66  	i2, ok := CastFloat64(e)
    67  	if !ok {
    68  		return false
    69  	}
    70  	return i.V() == i2
    71  }
    72  
    73  func (i Float64) ToString() String {
    74  	return NewString(i.String())
    75  }
    76  
    77  func (i Float64) HashCode() int32 {
    78  	return HashFloat64(float64(i))
    79  }
    80  
    81  func (i Float64) Compare(t Float64) int {
    82  	switch {
    83  	case i > t:
    84  		return 1
    85  	case i == t:
    86  		return 0
    87  	default:
    88  		return -1
    89  	}
    90  }
    91  
    92  func HashFloat64(f float64) int32 {
    93  	return Hash64(&f)
    94  }