diff --git a/pkg/schema/field/number.go b/pkg/schema/field/number.go
index 502a2fef7c406b4b4dc96aad34efce2e518a1e28..22e6bb71a6124fd725fd0a230aa637b1d4f08a69 100644
--- a/pkg/schema/field/number.go
+++ b/pkg/schema/field/number.go
@@ -88,6 +88,9 @@ func (NumberType) decode(_ context.Context, field *Field, v interface{}) (interf
 		case uint64:
 			return i, nil
 		case float64:
+			if i >= math.MaxInt64 || i <= math.MinInt64 {
+				return nil, errors.Errorf("the passed value must be no more than %d and no less than %d", math.MaxInt64, math.MinInt64)
+			}
 			return int64(math.Round(i)), nil
 		}
 	case NumberFormatFloat:
diff --git a/pkg/schema/field/number_test.go b/pkg/schema/field/number_test.go
index e731793d12135127dbfa67d949572f52708075a6..e694ee6b519669b29436e7ba7a48020f44b097fc 100644
--- a/pkg/schema/field/number_test.go
+++ b/pkg/schema/field/number_test.go
@@ -1,6 +1,8 @@
 package field
 
 import (
+	"fmt"
+	"math"
 	"reflect"
 	"testing"
 )
@@ -13,12 +15,15 @@ func TestNumberField_Decode(t *testing.T) {
 		want    interface{}
 		wantErr bool
 	}{
-		{"Correct", Number("int"), int64(2), int64(2), false},     // #0
-		{"Correct", Number("int"), 2.2, int64(2), false},          // #1
-		{"Correct", Number("int"), 2, int64(2), false},            // #2
-		{"Correct", Number("int"), float32(2.2), int64(2), false}, // #3
-		{"Correct", Number("int"), float64(2.6), int64(3), false}, // #4
-		{"Correct", Number("int"), 2.6, int64(3), false},          // #5
+		{"Correct", Number("int"), int64(2), int64(2), false},                                  // #0
+		{"Correct", Number("int"), 2.2, int64(2), false},                                       // #1
+		{"Correct", Number("int"), 2, int64(2), false},                                         // #2
+		{"Correct", Number("int"), float32(2.2), int64(2), false},                              // #3
+		{"Correct", Number("int"), float64(2.6), int64(3), false},                              // #4
+		{"Correct", Number("int"), 2.6, int64(3), false},                                       // #5
+		{"Convert error", Number(NumberFormatInt), math.MaxFloat64, nil, true},                 // #6
+		{"Convert error", Number(NumberFormatInt), float64(-9223372036854776000.0), nil, true}, // #7
+		{"Convert error", Number(NumberFormatInt), float64(9223372036854776000.0), nil, true},  // #7
 
 		{"Correct", Number("float"), int8(2), 2.0, false},                    // #6
 		{"Correct", Number("float"), 2.2, 2.2, false},                        // #7
@@ -86,3 +91,32 @@ func TestNumberField_Encode(t *testing.T) {
 		})
 	}
 }
+
+func TestNumberField_ConvertToInt64(t *testing.T) {
+	tests := []struct {
+		name   string
+		number float64
+		want   int64
+	}{
+		{
+			name:   "float64 to int64",
+			number: 9223372036854775807.0,
+			want:   9223372036854775807,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			num := int64(tt.number)
+			if reflect.DeepEqual(num, tt.want) {
+				return
+			}
+			t.Errorf("Convert() got = %v, want %v", int64(tt.number), tt.want)
+		})
+	}
+
+	fmt.Println(math.MaxInt64)
+	fmt.Println(float64(math.MaxInt64))
+	r := float64(math.MaxInt64)
+	fmt.Println(int64(r))
+
+}