22

パーセンテージを整数 (つまり、50、75、85 など) として含む smallint 列を持つテーブルがあります。

この列を 100 で割ると、次のようになります。

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE

結果は最も近い整数に丸められます。たとえば、数値「50」を含む行の場合、結果としてゼロが得られます。

簡単なステートメントでこれを複製できます。

SELECT 50 / 100 AS TEST_VALUE

それはなぜですか? また、結果の精度を高めるにはどうすればよいですか?

4

6 に答える 6

36

整数除算 (整数を整数で割る) を行うと、常に整数の答えが得られます。50/100 = .50、整数で言えば 0 です。

MY_COLUMN を 100.0 で割ってみましたか?

于 2009-04-06T21:03:42.213 に答える
26

整数をキャストします。

SELECT (cast(50 AS float)/100)
于 2009-04-06T21:05:05.050 に答える
1

整数除算を行っています。50/100 は 0 で、残りは 50 です。

浮動小数点除算を使用する必要があります。

于 2009-04-06T21:03:47.393 に答える
1

/(Divide)演算子を使用している場合

優先順位の高い引数のデータ型を返します。

整数の被除数が整数の除数で除算される場合、結果は、結果の小数部分が切り捨てられた整数になります。

したがって、オペランドの少なくとも 1 つを適切な型 ( decimal と numericまたはfloat または real ) にキャストする必要があります。

于 2015-01-12T16:06:18.917 に答える
1

注意 - 整数除算の剰余は丸められないことに注意してください。むしろ落とされる。これは、FLOOR sql 関数を呼び出すことと同じです。

これは一般的であり、2 つの整数を乗算するときに分数が発生しないため、そのように定義されています。したがって、整数の乗算では分数処理の方法論が想定されることはありませんが、整数の除算についても同じことが言えません。

これは、SQL で dateTime 演算を行う場合に影響を与えることがよくあります。

于 2010-08-04T00:39:22.357 に答える
0

別の整数になる2つの整数を除算しています。

そのようにキャストすることもできるはずです

SELECT (50/100)::数値;

于 2009-04-06T21:45:19.773 に答える