Skip to main content

Floating point types

We support standard IEEE 754 floating point types.

double is a 64-bit standard FP value. Accepted synonyms are float8 and float64.

float is a 32-bit standard FP value. Accepted synonyms are float4, and float32.

Floating point values include special values, such as NaN (not a number), -Infinity, and -Infinity. An alternative spelling for -Infinity is -inf, and an alternative spelling for Infinity is inf, and an alternative spelling for 'NaN' is 'nan'. When written as SQL literals, these values have to be surrounded by simple quotes: 'inf'. Please note that these strings are case-sensitive and spaces are ignored.

Infinity plus any finite value equals Infinity, as does Infinity plus Infinity. Infinity minus Infinity yields NaN.

NaN (not a number) value is used to represent undefined results. An operation with a NaN input yields NaN. The only exception is when the operation's output does not depend on the NaN value: an example is NaN raised to the zero power yields one.

In sorting order NaN is considered greater than all other values.

The legal operations are + (plus, unary and binary), - (minus, unary and binary), * (multiplication), / (division), % (modulus).

Modulus happens as follows: For: mod = x % y

  • if x >= 0 and y > 0 then: x - (floor(x / y) * y)
  • if x >= 0 and y < 0 then: x % abs(y)
  • if x < 0 and y > 0 then: - abs(x) % y
  • if x < 0 and y > 0 then: - abs(x) % abs(y)

Division by zero returns Infinity, (or NaN in case of 0e0 / 0e0). Modulus by zero return NaN.

Casting a string to a floating-point value will produce the value 0 when parsing fails.

Casting a value that is out of the supported range to a floating point type will produce a value that is inf or -inf.

Casting a floating-point value to string, float is rounded off to 6 decimal places and double is rounded off to 15 decimal places.

Please note that numeric values with a decimal point have the decimal type by default. To write a floating-point literal you have to include the e for exponent using the following grammar:

digits.digits[e[+-]digits]

[digits].digits[e[+-]digits]

Alternatively, you can use an explicit cast:

REAL '1.23'  -- string style
1.23::REAL -- PostgreSQL style

Predefined functions on Floating-point Values

ABS(value)absolute value
CEIL(value)Ceiling function: nearest integer value greater than or equal to argument (result is a floating point value)
FLOOR(value)Floor function: nearest integer value less than or equal to argument (result is a floating point value)
TRUNCATE(value)Returns the integer portion of the number. This is true truncation, no rounding is performed.
TRUNCATE(value, digits)where digits is an integer value. Truncates the value to the specified number of decimal digits after the decimal point.
ROUND(value)Rounds to the nearest integer and returns it. Rounding follows "Bankers Rounding" (rounds 0.5 to the nearest even number) strategy.
ROUND(value, digits)where digits is an integer value. Round the value to the specified number of decimal digits after the decimal point.
POWER(BASE, EXPONENT)The power function, raising BASE to the power EXPONENT
SQRT(value)Square root of value. Produces a runtime error for negative values.
EXP(value)Returns e raised to the power of value (exponential).
LN(value)The natural logarithm of value. Returns `-inf` for 0. Produces a runtime error for negative numbers.
LOG(value, [, base])The logarithm of value to base, or base e if it is not present. Produces a runtime error for negative values for either value or base. Returns `-inf` for base 0.
LOG10(value)The logarithm base 10 of value. Returns `-inf` for 0. Produces a runtime error for negative numbers.
IS_INF(value)Returns true if the value is infinite.
IS_NAN(value)Returns true if the value is NaN. Note that two NaN values may not be equal.
SIN(value)The sine of value as radians. sin only supports argument of type double, so all other types are cast to double. Returns a double.
COS(value)The cosine of value as radians. cos only supports argument of type double, so all other types are cast to double. Returns a double.
PIReturns the approximate value of PI as double. Note that () is not allowed. Example: SELECT PI;
TAN(value)The tangent of the value as radians. tan only supports arguments of type double, so all other types are cast to double. Returns a double. For undefined values of tan (like tan(pi / 2)) a fixed arbitrary value may be returned.
COT(value)The cotangent of the value as radians. cot only supports arguments of type double, so all other types are cast to double. Returns a double. For undefined values of cot (like cot(pi)) a fixed arbitrary value may be returned.
SEC(value)The secant of the value as radians. sec only supports arguments of type double, so all other types are cast to double. Returns a double. For undefined values of sec (like sec(pi / 2)) a fixed arbitrary value may be returned.
CSC(value)The cosecant of the value as radians. csc only supports arguments of type double, so all other types are cast to double. Returns a double. For undefined values of csc (like csc(pi)) a fixed arbitrary value may be returned.
ASIN(value)The arcsine of the value, returned as radians. The returned value is in the range [-pi/2, pi/2] or NaN if the value is outside the range of [-1, 1]. asin only supports arguments of type double, so all other types are cast to double. Returns a double.
ACOS(value)The arccosine of the value, returned as radians. The returned value is in the range [0, pi] or NaN if the value is outside the range of [-1, 1]. acos only supports arguments of type double, so all other types are cast to double. Returns a double.
ATAN(value)The arctangent of the value, returned as radians. The returned value is in the range [-pi/2, pi/2].atan only supports arguments of type double, so all other types are cast to double. Returns a double.
ATAN2(y, x)The arctangent of y/x, returned as radians. atan2 only supports arguments of type double, so all other types are cast to double. Returns a double.
DEGREES(value)Converts the given value in radians to degrees. degrees only supports arguments of type double, so all other types are cast to double. Returns a double.
RADIANS(value)Converts the given value in degrees to radians. radians only supports arguments of type double, so all other types are cast to double. Returns a double.
CBRT(value)Calculates the cube root of the given value. cbrt only supports arguments of type double, so all other types are cast to double. Returns a double.
SINH(value)The hyperbolic sine of the value as radians. sinh only supports arguments of type double, so all other types are cast to double. Returns a double.
COSH(value)The hyperbolic cosine of the value as radians. cosh only supports arguments of type double, so all other types are cast to double. Returns a double.
TANH(value)The hyperbolic tangent of the value as radians. tanh only supports arguments of type double, so all other types are cast to double. Returns a double.
COTH(value)The hyperbolic cotangent of the value as radians. coth only supports arguments of type double, so all other types are cast to double. Returns a double.
SECH(value)The hyperbolic secant of the value as radians. sech only supports arguments of type double, so all other types are cast to double. Returns a double.
CSCH(value)The hyperbolic cosecant of the value as radians. csch only supports arguments of type double, so all other types are cast to double. Returns a double.
ASINH(value)The hyperbolic arcsine of the value, returned as radians. asinh only supports arguments of type double, so all other types are cast to double. Returns a double.
ACOSH(value)The hyperbolic arccosine of the value, returned as radians. acosh only supports arguments of type double, so all other types are cast to double. Returns a double.
ATANH(value)The hyperbolic arctangent of the value, returned as radians. atanh only supports arguments of type double, so all other types are cast to double. Returns a double.