数値的な意味、つまり、浮動小数点形式に固有の丸めの問題の可能性はすべて知っていますが、私の場合、ダウンストリームではなくクエリでストレートに変換したいDECIMAL
列があります。MySQL
DOUBLE
MySQL
誰でも助けてもらえますか?
SELECT my_decimal_field + 0E0 FROM my_table
MySQL マニュアルからの次の引用は、これがどのように機能するかを説明しています。
数値リテラルには、正確な値 (整数および DECIMAL) リテラルと近似値 (浮動小数点) リテラルが含まれます。
仮数部と指数部を使用した指数表記で表された数値は、近似値の数値です。
数値式の処理は、式に含まれる値の種類によって異なります。
- 近似値が存在する場合、式は近似値であり、浮動小数点演算を使用して評価されます。
DOUBLE
計算を行って、たとえば3 桁目にROUND()
aを使用する場合に問題が発生するようにキャストすることはできないようです。およびが DECIMAL 12,2 フィールドの場合、DECIMAL 12,2
使用ROUND(foo * bar,2)
すると追加の数字が無視されます。foo
bar
つまり、次のようなことを実行して、引き続き機能させることができます。
ROUND(CAST(foo AS DECIMAL(30,15)*CAST(bar AS DECIMAL(30,15)),2)