8

数値的な意味、つまり、浮動小数点形式に固有の丸めの問題の可能性はすべて知っていますが、私の場合、ダウンストリームではなくクエリでストレートに変換したいDECIMAL列があります。MySQLDOUBLEMySQL

誰でも助けてもらえますか?

4

4 に答える 4

11

SELECT my_decimal_field + 0E0 FROM my_table

MySQL マニュアルからの次の引用は、これがどのように機能するかを説明しています。

9.1.2 数値リテラル

数値リテラルには、正確な値 (整数および DECIMAL) リテラルと近似値 (浮動小数点) リテラルが含まれます。

仮数部と指数部を使用した指数表記で表された数値は、近似値の数値です。

12.22.3 式の処理

数値式の処理は、式に含まれる値の種類によって異なります。

  • 近似値が存在する場合、式は近似値であり、浮動小数点演算を使用して評価されます。
于 2015-10-07T11:31:47.960 に答える
0

DOUBLE計算を行って、たとえば3 桁目にROUND()aを使用する場合に問題が発生するようにキャストすることはできないようです。およびが DECIMAL 12,2 フィールドの場合、DECIMAL 12,2使用ROUND(foo * bar,2)すると追加の数字が無視されます。foobar

つまり、次のようなことを実行して、引き続き機能させることができます。

ROUND(CAST(foo AS DECIMAL(30,15)*CAST(bar AS DECIMAL(30,15)),2)
于 2015-09-06T16:46:12.783 に答える