2017-04-05 4 views
1

where節のfloat値を比較すると、適切な結果が得られません。私はあまりにも0.61mysqlのdouble値を比較しても正しく動作していない可能性があります

のレコードを持っていながら、他 0.50何も検索されていないようにスコアをチェックすると動作します。このクエリのスコアの例

SELECT * FROM users WHERE score = 0.61 

ため はdouble型

が、上記のクエリの列です

上記のクエリはまた、私は

SELECT * FROM users WHERE trim(score) = 0.61 
+0

スコア欄のデータ型は? – JYoThI

+0

はい、私が 'trim'関数を使うとうまくいきます。 –

+0

@VivekMaru http://stackoverflow.com/a/2567509/4248328 –

答えて

1

を使用する場合、私はあなたが使用することをお勧め働くdecimalの代わりにfloatと入力します。また、小数点以下は2桁しかありません。

使用方法に関するドキュメントはこちらです。 Link

これがあなたの問題を解決することを願っています。

+0

のレコードを持っていても何も表示されません小数点を使用すると自動的に追加されます0 'が「0.6100」になり、その必要はありません。 –

+0

cast(' score 'AS CHAR)<=>' 0.61 'これを試してみてください – rahulsm

0

私は、鋳造せずに仕事をしたりトリミングしませんあなたのフロートの列に小数の範囲を指定しなかったしなかった場合:

これが正常に動作します:

-- drop table test_float; 
create table test_float(f float(6,4) , d DECIMAL(4,2)); 
insert into test_float values (0.5,0.5); 
insert into test_float values (0.61,0.61); 
select * from test_float where f = d; 
select * from test_float where f = 0.61; 

、これは動作しません。

drop table test_float; 
create table test_float(f float , d DECIMAL(4,2)); 
insert into test_float values (0.5,0.5); 
insert into test_float values (0.61,0.61); 
select * from test_float; 
select * from test_float where f = d; 
select * from test_float where f = 0.61; 
select * from test_float where CAST(f as DECIMAL(16,2)) = 0.61; 

それは小数範囲のために働くrange = 1 なぜ、私は本当に、なぜ分からないのですか?!

関連する問題