MySQLのFLOAT型フィールドがすべての小数値を受け付けない理由とDECIMAL型による解決方法
MySQLでFLOAT型に値が正しく保存されない問題とは?
MySQLでFLOAT型を使用すると、浮動小数点数の仕様上、一部の数値が正確に格納されず、丸め誤差や値の受け入れ不良が発生することがあります。金額などの正確な小数値を扱いたい場合は、固定小数点型である DECIMAL() を使用するのが解決策です。
DECIMAL(10,2) のように指定すると、整数部分8桁・小数部分2桁の合計10桁の数値を誤差なく正確に保存できます。以下に具体的な手順を紹介します。
1. DECIMAL型のテーブルを作成する
まず、Amount カラムを DECIMAL(10,2) として定義したテーブルを作成します。
mysql> create table DemoTable(Amount DECIMAL(10,2)); Query OK, 0 rows affected (0.54 sec)
2. レコードを挿入する
次に、INSERTコマンドを使って複数のレコードを追加します。
mysql> insert into DemoTable values(2194848.90); Query OK, 1 row affected (0.65 sec) mysql> insert into DemoTable values(90309393.79); Query OK, 1 row affected (0.25 sec) mysql> insert into DemoTable values(8999999.68); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(90900000.99); Query OK, 1 row affected (0.26 sec)
3. データを確認する
SELECT文ですべてのレコードを表示して、値が正確に保存されているか確認しましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+-------------+ | Amount | +-------------+ | 2194848.90 | | 90309393.79 | | 8999999.68 | | 90900000.99 | +-------------+ 4 rows in set (0.00 sec)
まとめ
FLOAT型はバイナリ浮動小数点方式のため近似値で保存されるのに対し、DECIMAL型は数値を文字列のように正確に保持します。金額計算など精度が求められる場面では、必ずDECIMAL型を使うことで、値が正しく受け入れられない問題を防ぐことができます。
-
Windows 10がパスワードを受け付けないときの原因と対処法まとめ
Windows 10のPCにログインしようとしても、ログイン画面で正しいパスワードを入力しても受け付けられない――そんなトラブルが多くのユーザーから報告されています。入力しているパスワードは確実に正しいはずなのに、なぜかログインできないというケースです。特定の1つのアカウントだけで発生する場合もあれば、すべてのWindowsアカウントのパスワードが弾かれる場合もあります。Windows 10が正しいパスワードを拒否する原因この問題について、多数のユーザー報告と実際に効果のあった修復手順をもとに調査しました。その結果、以下のような原因が考えられることが分かりました。キーボードドライバーの不具合
-
マウントされないAppleAPFSMediaをデータ損失なしで修復する方法
概要:本記事では、macOS Catalina 10.15/Mojave 10.14/High Sierra 10.13環境でマウントできなくなったAppleAPFSMediaの問題を修復し、失われたデータを復元する方法を詳しく解説します。目次データ損失なしでマウントされないAppleAPFSMediaを修復するには?APFSコンテナを追加すると、macOSは自動的に仮想ディスクを作成します。このディスクは「AppleAPFSMedia」と呼ばれ、追加されたAPFSコンテナと同じ物理ストレージ領域を使用します。しかし、この仮想ディスクも破損することがあり、マウントできなくなるケースがあります。