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 }