Floating point 按文字除法后的红移小数比例
试图理解这种行为Floating point 按文字除法后的红移小数比例,floating-point,amazon-redshift,Floating Point,Amazon Redshift,试图理解这种行为 CREATE TABLE tab (x DECIMAL(10,0), y DECIMAL(10,0)) INSERT INTO tab VALUES(1, 3) 从选项卡中选择x/y将返回0.3333。。。。至小数点后11位 我不明白的是:如果我除以一个类型相同的文本x/3::decimal10,0,我得到的正好是小数点后4位0.3333 除了使用float先将商写入表中或更糟地写入表中之外,如何对结果的精度/比例进行更细粒度的控制?使用示例选项卡表 select x /
CREATE TABLE tab (x DECIMAL(10,0), y DECIMAL(10,0))
INSERT INTO tab VALUES(1, 3)
从选项卡中选择x/y将返回0.3333。。。。至小数点后11位
我不明白的是:如果我除以一个类型相同的文本x/3::decimal10,0,我得到的正好是小数点后4位0.3333
除了使用float先将商写入表中或更糟地写入表中之外,如何对结果的精度/比例进行更细粒度的控制?使用示例选项卡表
select x / y,
((x/ 3::decimal)),
((x/ (select 3)::decimal)),
((x/ (select 3)::decimal))::decimal(10,6)
from tab;
返回
0.33333333 0.3333 0.3333333 0.333333
您可以在第三个示例中看到,将3::decimal替换为select 3::decimal大大提高了精度
如果需要设置输出精度,可以像我的第四个示例x/select 3::decimal::decimal10,6那样使用示例选项卡表进行设置
select x / y,
((x/ 3::decimal)),
((x/ (select 3)::decimal)),
((x/ (select 3)::decimal))::decimal(10,6)
from tab;
返回
0.33333333 0.3333 0.3333333 0.333333
您可以在第三个示例中看到,将3::decimal替换为select 3::decimal大大提高了精度
如果您需要设置输出精度,您可以像我的第四个示例x/从上面的Amazon文档中选择3::decimal::decimal10,6那样执行此操作:您可能还会遇到计算值比例变化或意外的情况。-FWIW看起来红移忽略了文本的十进制转换,并使用实际精度1而不是转换精度10,这将根据定义的规则产生4的刻度。从上面的Amazon文档:您可能还会遇到计算值的刻度变化或意外的情况。-FWIW看起来红移忽略了文本的转换为十进制,并使用实际精度1而不是转换精度10,根据定义的规则,这将导致4的小数位数。奇怪的是,select 3::decimal的行为不同于3::decimal奇怪的是,select 3::decimal的行为不同于3::decimal