私はpostgresqlを使用しています.データベースのテーブルにはタイプの列がありますREAL
.7つ以上のゼロを持つ実際の値がpostgresqlでたとえば1e + 007として保存される場合.クエリによって取得されると、値も1e + 007として返されます.しかし、私は10000000 の値が必要です。解決策は何ですか
3 に答える
数値の正確な表現を気にするほとんどすべてのものを含め、浮動小数点数が適していないものに浮動小数点数を使用すると、それ以上の問題が発生します。
NUMERIC
精度と位取りを制御できる 10 進数 (10 進数) の数値データ型であるを使用することをお勧めします。数値型を参照してください。NUMERIC
は計算の実行が遅くなり、より多くのストレージを消費するため、常に正しい答えとは限りませんが、非常に多くのアプリケーションにとって理想的です。
フロートを使用できますが、正確に等しいかどうかを安全に比較できないため、表示に丸め関数と書式設定関数を使用する必要があるため、難しいだけです。
例:
regress=> select '1.2'::float8 - '1.0'::float8;
?column?
----------------------
0.199999999999999956
(1 row)
regress=> select '1.2'::numeric - '1.0'::numeric;
?column?
----------
0.2
(1 row)
このような問題に対するもう 1 つの一般的な解決策は、アプリケーション定義の固定小数点表現を使用することです。(たとえば) 小数点以下 2 桁が必要な場合は、数値2000.11
を200011
データベースに格納し、100 を掛けるだけです。これは、金融アプリケーションでは一般的な手法ですが、適切な小数データ型を使用することがより一般的になりました。
select to_char(1e+007::real, '9999999999')
マニュアルの詳細: http://www.postgresql.org/docs/current/static/functions-formatting.html
SQL を使用しますCAST
。DB2で動作します
select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1;
10000000.00
希望する値 (15,0) に従って小数点以下の桁数を設定できます。