2017-02-14 5 views
0

に倍精度を使用して、私はdouble precision列を使用してテーブルを照会したいが、私はは、クエリ

select * from foo where bar > 2

をしようとしたとき、私は結果を得ませんでした。あまりに

select * from foo where bar < 2

何もありません!私は

select bar from foo

をしようとすると、私はそこにすべてのレコードを見ることができます。いくつかの値が1.31744579794415e-084.82082769315891e-08と似ているなど

すでに私が間違ってやってる何bar < 2.0bar < 2.0::float8

を試してみましたか?

+0

oops!私はここが最高の場所ではないと思う。誰かがこれをDBA SEに移すことができますか? –

答えて

1

このソリューションは機能しますか?

select * from foo where round(bar::numeric, 2) < 2 

しかし、これらすべてのアサーションが満たされているので、私は驚いています:

select round(1.31744579794415e-08::numeric, 2) < 2 
select 1.31744579794415e-08::numeric < 2 
select 1.31744579794415e-08 < 2 

あなたは他に何もありませんか?

+0

まあ、私は小さすぎる数字を使用しています。このツールを使用してhttp://www.calculatorsoup.com/calculators/math/scientific-notation-converter.php私は2つの小数が数字を比較するのに十分ではないことを発見します。私の例では、 '1.31744579794415e-08'は実際には' 0.0000000131744579794415'であり、私のクエリでは '2'とはかなり離れています。話を始めるには 'round(bar :: numeric、10) 'が必要だと思います。 –

+0

私はちょうど私の答えを編集しました。 – devoh

+0

あなたのソリューション(タイプキャスト)を使用しないと、私は結果がありません。私も驚いていますが、一度賢い修道士が言った: 'それは動作したらもう触れないでください。 –