2

'id'列が1つしかない列があります。テーブルのcreateステートメントは次のとおりです。

CREATE TABLE `test` (
  `id` float default NULL
);

表にある値は次のとおりです。

id
-----
8.075

クエリを実行すると:

SELECT ROUND(id, 2) FROM test;

結果は「8.07」です。しかし、単純にクエリを実行すると、次のようになります。

SELECT ROUND(8.075,2);

'8.08'の値を取得しています。

両方の場合で一貫した結果を得るために何ができるでしょうか?

これらのクエリのデモは、ここで表示できます。

4

1 に答える 1

3

ラウンドの結果は、リテラルの暗黙の型によって異なり8.075ます。

浮動小数点数8.075は、内部的に可能な限り最も近い浮動小数点数として表されます。これは8.07499999999999928946、2桁に丸められ8.07ます。

リテラル8.075が小数として解釈されている場合は、「半偶数」ルールが適用されている可能性があります。調べてみますが、MySQLのウェブサイトは現在ダウンしています。

于 2012-06-16T06:23:47.453 に答える