diff --git a/type_specific_codegen.go b/type_specific_codegen.go index 9859b40..8cc6b90 100644 --- a/type_specific_codegen.go +++ b/type_specific_codegen.go @@ -1760,6 +1760,9 @@ func (v *Value) Float32(optionalDefault ...float32) float32 { if s, ok := v.data.(float32); ok { return s } + if s, ok := v.data.(int); ok { + return float32(float64(s)) + } if len(optionalDefault) == 1 { return optionalDefault[0] } @@ -1770,6 +1773,9 @@ func (v *Value) Float32(optionalDefault ...float32) float32 { // // Panics if the object is not a float32. func (v *Value) MustFloat32() float32 { + if s, ok := v.data.(int); ok { + return float32(float64(s)) + } return v.data.(float32) } @@ -1885,6 +1891,9 @@ func (v *Value) Float64(optionalDefault ...float64) float64 { if s, ok := v.data.(float64); ok { return s } + if s, ok := v.data.(int); ok { + return float64(s) + } if len(optionalDefault) == 1 { return optionalDefault[0] } @@ -1895,6 +1904,9 @@ func (v *Value) Float64(optionalDefault ...float64) float64 { // // Panics if the object is not a float64. func (v *Value) MustFloat64() float64 { + if s, ok := v.data.(int); ok { + return float64(s) + } return v.data.(float64) } diff --git a/type_specific_codegen_test.go b/type_specific_codegen_test.go index 72fa8c8..3320ce7 100644 --- a/type_specific_codegen_test.go +++ b/type_specific_codegen_test.go @@ -1707,10 +1707,12 @@ func TestCollectUintptr(t *testing.T) { */ func TestFloat32(t *testing.T) { val := float32(1) - m := objx.Map{"value": val, "nothing": nil} + m := objx.Map{"value": val, "nothing": nil, "ivalue": 1} assert.Equal(t, val, m.Get("value").Float32()) assert.Equal(t, val, m.Get("value").MustFloat32()) + assert.Equal(t, val, m.Get("ivalue").Float32()) + assert.Equal(t, val, m.Get("ivalue").MustFloat32()) assert.Equal(t, float32(0), m.Get("nothing").Float32()) assert.Equal(t, val, m.Get("nothing").Float32(1)) assert.Panics(t, func() { @@ -1828,10 +1830,12 @@ func TestCollectFloat32(t *testing.T) { */ func TestFloat64(t *testing.T) { val := float64(1) - m := objx.Map{"value": val, "nothing": nil} + m := objx.Map{"value": val, "nothing": nil, "ivalue": 1} assert.Equal(t, val, m.Get("value").Float64()) assert.Equal(t, val, m.Get("value").MustFloat64()) + assert.Equal(t, val, m.Get("ivalue").Float64()) + assert.Equal(t, val, m.Get("ivalue").MustFloat64()) assert.Equal(t, float64(0), m.Get("nothing").Float64()) assert.Equal(t, val, m.Get("nothing").Float64(1)) assert.Panics(t, func() {