Non-integer
This page documents the preview version (v2.23). Preview includes features under active development and is for development and testing only. For production, use the stable version (v2024.1). To learn more, see Versioning.
Synopsis
Use the non-integer (floating-point and fixed-point) data types to specify non-integer numbers. Different floating point data types represent different precision numbers.
| Data type | Description | Decimal precision |
|---|---|---|
FLOAT |
Inexact 32-bit floating point number | 7 |
DOUBLE |
Inexact 64-bit floating point number | 15 |
DECIMAL |
Arbitrary-precision number | no upper-bound |
Syntax
type_specification ::= { FLOAT | DOUBLE | DOUBLE PRECISION | DECIMAL }
non_integer_floating_point_literal ::= non_integer_fixed_point_literal | "NaN" | "Infinity" | "-Infinity"
non_integer_fixed_point_literal ::= [ + | - ] { digit [ digit ...] '.' [ digit ...] | '.' digit [ digit ...] }
Where
- Columns of type
FLOAT,DOUBLE,DOUBLE PRECISION, orDECIMALcan be part of thePRIMARY KEY. DOUBLEandDOUBLE PRECISIONare aliases.non_integer_floating_point_literalis used for values ofFLOAT,DOUBLEandDOUBLE PRECISIONtypes.non_integer_fixed_point_literalis used for values ofDECIMALtype.
Semantics
- Values of different floating-point and fixed-point data types are comparable and convertible to one another.
- Conversion from floating-point types into
DECIMALwill raise an error for the special valuesNaN,Infinity, and-Infinity.
- Conversion from floating-point types into
- Values of non-integer numeric data types are neither comparable nor convertible to integer although integers are convertible to them.
- The ordering for special floating-point values is defined as (in ascending order):
-Infinity, all negative values in order, all positive values in order,Infinity, andNaN.
Examples
ycqlsh:example> CREATE TABLE sensor_data (sensor_id INT PRIMARY KEY, float_val FLOAT, dbl_val DOUBLE, dec_val DECIMAL);
ycqlsh:example> INSERT INTO sensor_data(sensor_id, float_val, dbl_val, dec_val)
VALUES (1, 321.0456789, 321.0456789, 321.0456789);
Integers literals can also be used (Using upsert semantics to update a non-existent row).
ycqlsh:example> UPDATE sensor_data SET float_val = 1, dbl_val = 1, dec_val = 1 WHERE sensor_id = 2;
ycqlsh:example> SELECT * FROM sensor_data;
sensor_id | float_val | dbl_val | dec_val
-----------+-----------+-----------+-------------
2 | 1 | 1 | 1
1 | 321.04568 | 321.04568 | 321.0456789