diff --git a/lib/primalize/single.rb b/lib/primalize/single.rb
index <HASH>..<HASH> 100644
--- a/lib/primalize/single.rb
+++ b/lib/primalize/single.rb
@@ -53,6 +53,10 @@ module Primalize
         Float.new(&coerce)
       end
 
+      def number &coerce
+        Number.new(&coerce)
+      end
+
       def optional *types, &coerce
         Optional.new(types, &coerce)
       end
@@ -146,6 +150,18 @@ module Primalize
       end
     end
 
+    class Number
+      include Type
+
+      def === value
+        ::Numeric === value
+      end
+
+      def inspect
+        'number'
+      end
+    end
+
     class String
       include Type
 
diff --git a/spec/primalize/single_spec.rb b/spec/primalize/single_spec.rb
index <HASH>..<HASH> 100644
--- a/spec/primalize/single_spec.rb
+++ b/spec/primalize/single_spec.rb
@@ -23,6 +23,7 @@ module Primalize
         address: optional(string),
         state: enum(1, 2, 3, 4),
         order: primalize(order_serializer_class),
+        value: number,
         created_at: timestamp,
       )
     end
@@ -44,6 +45,7 @@ module Primalize
           price_cents: 123_45,
           payment_method: 'card_123456',
         ),
+        value: 21.3,
         created_at: Time.new(1999, 12, 31, 23, 59, 59),
       }
     end
@@ -218,6 +220,7 @@ module Primalize
           address: optional(string),
           state: enum(1, 2, 3, 4),
           order: primalize(OrderSerializer),
+          value: number,
         )
       EOF
Primalize all types of primitive numbers