带PrestoSQL的32位或64位浮点除法

带PrestoSQL的32位或64位浮点除法,sql,numbers,presto,trino,Sql,Numbers,Presto,Trino,在Presto SQL中,SELECT 1/3返回0,因为/执行整数除法 但是SELECT 1.0/3返回0.3。。。如何获取0.3333?(即,更具体地说,32位或64位精度而不是第一个十进制截断?您可以在除法之前cast() 要获得64位精度,请执行以下操作: select cast(1 as double) / 3 select cast(1 as real) / 3 要获得32位精度,请执行以下操作: select cast(1 as double) / 3 select cast

在Presto SQL中,
SELECT 1/3
返回
0
,因为
/
执行整数除法

但是
SELECT 1.0/3
返回
0.3
。。。如何获取
0.3333
?(即,更具体地说,32位或64位精度而不是第一个十进制截断?

您可以在除法之前
cast()

要获得64位精度,请执行以下操作:

select cast(1 as double) / 3
select cast(1 as real) / 3
要获得32位精度,请执行以下操作:

select cast(1 as double) / 3
select cast(1 as real) / 3
您可以在分割之前
cast()

要获得64位精度,请执行以下操作:

select cast(1 as double) / 3
select cast(1 as real) / 3
要获得32位精度,请执行以下操作:

select cast(1 as double) / 3
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

我假设文本
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

我意识到我们目前没有记录文字,所以这里是PR:@piotr这太棒了。根据文档修改了答案(之前只是猜测)。我意识到我们目前没有文档化文字,所以这里是PR:@piotr,太棒了。根据文档修改了答案(之前只是猜测)。