2011-06-28 8 views
1

ラウンド関数がうまくいきません。 > 268.13 - 私は2つの小数にそれを丸めている場合ので、268.125 = FIELD_1 * field_2 * field_3 * field_4:だから我々はそれを知っているmysqlのラウンドがうまく機能しない

field_1= 375 
field_2= 0.65 
field_3= 0.1 
field_4= 11 

:私はこのように私のDB内の行を持っています。

が、MySQLで、私は268.12ました - >選択ラウンドを(FIELD_1 * field_2 * field_3 * field_4)私のテーブルから - > 268.12

このような状況は、ちょうどこれらの値で発生

が、私は他の数字と何の問題もなく試してみましたラウンド作品。

すべての回避策。私はmysql 4.1.22と5.1.44を試してみましたが、同じ問題が発生します。私は他のフォーラムhttp://bugs.mysql.com/bug.php?id=6251を読んでバグではなく、Cライブラリの実装に依存していると言いました。

+0

http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding – Robert

答えて

3

あなたはそれらの列のためにどのようなデータタイプを使用していますか?

あなたが正確な精度が必要な場合、あなたはNUMERICDECIMAL、ないFLOATREAL、またはDOUBLEを使用する必要があります。 manualから

The DECIMAL and NUMERIC types store exact numeric data values. 
These types are used when it is important to preserve exact precision, 
for example with monetary data. 
+0

フィールドを10進数に変更しました。 ! – dtrejogo

+0

完璧な答え – neelabh

0

適用できない場合は、FLOOR()

を使用することができ該当する場合は、アプリケーション側でこれを処理したほうが良いでしょう。私。計算アプリケーションの側全体を実行してから、ラウンドを実行するか、またはアプリケーション側だけを実行します。

SELECT (field_1*field_2*field_3*field_4) AS myCalculation FROM my table

+0

私は、自分のアプリケーションでは数学の多くを持っているMySQLでサーバーよりも高速であること側。あなたの提案に感謝します。 – dtrejogo

関連する問題