使用 PrestoSQL 进行 32 位或 64 位浮点除法
32- or 64-bits float division with PrestoSQL
在 Presto SQL, SELECT 1 / 3
returns 0
, 因为 /
执行整数除法。
但是SELECT 1.0 / 3
returns0.3
...我怎样才能得到0.3333333333
? (即,更具体地说,32 位或 64 位精度而不是第一位小数截断?)
可以cast()
再除。
要获得 64 位精度:
select cast(1 as double) / 3
要获得 32 位精度:
select cast(1 as real) / 3
我假设文字 1.0
被视为 DECIMAL(2, 1)
。您可以改用浮点文字:
SELECT REAL '1' / 3 -- '1' is a 32-bit float
SELECT DOUBLE '1' / 3 -- '1' is a 64-bit float
SELECT 1e0 / 3 -- scientific notation implies 64-bit float
在 Presto SQL, SELECT 1 / 3
returns 0
, 因为 /
执行整数除法。
但是SELECT 1.0 / 3
returns0.3
...我怎样才能得到0.3333333333
? (即,更具体地说,32 位或 64 位精度而不是第一位小数截断?)
可以cast()
再除。
要获得 64 位精度:
select cast(1 as double) / 3
要获得 32 位精度:
select cast(1 as real) / 3
我假设文字 1.0
被视为 DECIMAL(2, 1)
。您可以改用浮点文字:
SELECT REAL '1' / 3 -- '1' is a 32-bit float
SELECT DOUBLE '1' / 3 -- '1' is a 64-bit float
SELECT 1e0 / 3 -- scientific notation implies 64-bit float