### Reference

# Numeric types¶

There are two numeric types in JSON Schema: integer and number. They share the same validation keywords.

JSON has no standard way to represent complex numbers, so there is no way to test for them in JSON Schema.

## integer¶

The `integer`

type is used for integral numbers. JSON does not have
distinct types for integers and floating-point values. Therefore, the
presence or absence of a decimal point is not enough to distinguish
between integers and non-integers. For example, `1`

and `1.0`

are two
ways to represent the same value in JSON. JSON Schema considers that
value an integer no matter which representation was used.

`int`

type.Numbers with a zero fractional part are considered integers:

Floating point numbers are rejected:

Numbers as strings are rejected:

## number¶

The `number`

type is used for any numeric type, either integers or
floating point numbers.

`float`

type.Simple floating point number:

Exponential notation also works:

Numbers as strings are rejected:

## Multiples¶

Numbers can be restricted to a multiple of a given number, using the
`multipleOf`

keyword. It may be set to any positive number.

The multiple can be a floating point number:

## Range¶

Ranges of numbers are specified using a combination of the `minimum`

and
`maximum`

keywords, (or `exclusiveMinimum`

and `exclusiveMaximum`

for
expressing exclusive range).

If *x* is the value being validated, the following must hold true:

*x* ≥ `minimum`

*x* > `exclusiveMinimum`

*x* ≤ `maximum`

*x* < `exclusiveMaximum`

While you can specify both of `minimum`

and `exclusiveMinimum`

or both
of `maximum`

and `exclusiveMaximum`

, it doesn't really make sense to do
so.

Less than `minimum`

:

`minimum`

is inclusive, so 0 is valid:

`exclusiveMaximum`

is exclusive, so 100 is not valid:

Greater than `maximum`

:

In JSON Schema Draft 4, `exclusiveMinimum`

and `exclusiveMaximum`

work
differently. There they are boolean values, that indicate whether
`minimum`

and `maximum`

are exclusive of the value. For example:

if `exclusiveMinimum`

is `false`

, *x* ≥ `minimum`

if `exclusiveMinimum`

is `true`

, *x* > `minimum`

.

This was changed to have better keyword independence.

Here is an example using the older Draft 4 convention:

Less than `minimum`

:
```
json
// props { "indent": true, "valid": false }
-1
```

`exclusiveMinimum`

was not specified, so 0 is included:

`exclusiveMaximum`

is `true`

, so 100 is not included:

Greater than `maximum`

: