▽1
●
JULY ●200ポイント ベストアンサー |
これを理解するには、浮動小数点型というものが、どういうものかを理解する必要があります。
computer programming I
上記ページが分かりやすいと思うのですが、浮動小数点型は、2進数の世界でデータを表現しているため、10 進数でキリの良い数値であっても、2進数では循環小数となってしまう場合があります。
その「2進数では循環小数」を、浮動小数点型では、決められたビット長の範囲でしか保存出来ないので、無限の桁数を有限の桁数で切り取ってしまうことになります。
この為、浮動小数点型は、人間が考えている 10 進数の数字と誤差を持っている事が多いです。10 進数表示で有効桁が数桁のうちは、誤差なく浮動小数点で表現できているように見えますが、有効桁数を大きくすると、実際には誤差が生じている事が分かります。
で、DECIMAL 型の場合は、10 進数の一桁一桁を、そのままの形で保存します。
MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 7.14.2 DECIMAL データ型の変更
つまり、浮動小数点型が2進数でデータを保持しているために生じる 10 進数との誤差が、DECIMAL 型へ変換することで現れた、ということになります。