0

私はpostgresqlを使用しています.データベースのテーブルにはタイプの列がありますREAL.7つ以上のゼロを持つ実際の値がpostgresqlでたとえば1e + 007として保存される場合.クエリによって取得されると、値も1e + 007として返されます.しかし、私は10000000 の値が必要です。解決策は何ですか

4

3 に答える 3

0

数値の正確な表現を気にするほとんどすべてのものを含め、浮動小数点数が適していないものに浮動小数点数を使用すると、それ以上の問題が発生します。

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.11200011データベースに格納し、100 を掛けるだけです。これは、金融アプリケーションでは一般的な手法ですが、適切な小数データ型を使用することがより一般的になりました。

于 2013-04-13T01:03:41.047 に答える
0
select to_char(1e+007::real, '9999999999')

マニュアルの詳細: http://www.postgresql.org/docs/current/static/functions-formatting.html

于 2013-04-12T11:21:18.827 に答える
0

SQL を使用しますCAST。DB2で動作します

select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1;
10000000.00

希望する値 (15,0) に従って小数点以下の桁数を設定できます。

于 2013-04-12T10:22:27.860 に答える