我无法获得此代码的结果:
1.5 1.6 3.0 4.0 1.2 1.3
1.7 1.1 2.6 3.4 1.5 1.6
......
当然这应该打印0.05,0.1,...,1.0但是迭代停止在0.95。这是浮动问题吗?
答案 0 :(得分:0)
是的,你正在使用浮点数,因此你不会完全达到1.0。将b设置为例如1.001以应对舍入错误。请注意,您的数字将以二进制表示。如果它们是真正的十进制数,则可以完全表示它们。
顺便说一句,我宁愿使用:
for i in range (1, 21):
print i/20.
注意。 (或.0)在20后面使它成为一个浮动,迫使浮动分裂。
答案 1 :(得分:0)
或许更好的答案如下:
create or replace function select_from_a_table(limit1 numeric, limit2 numeric)
returns setof a_table language sql as $$
select *
from a_table
where value3 >= limit1
union all
select value1, 0, max(value3)
from a_table
group by value1
having max(value3) <= limit2;
$$;
select * from select_from_a_table(0.8, 0.2);
value1 | value2 | value3
--------+--------+--------
1 | 1 | 0.9
1 | 2 | 0.8
2 | 0 | 0.15
(3 rows)
这样你根本不需要处理浮点数。许多方法给猫皮肤。