8

内部クエリに計算フィールド「MySum」があり、計算後の値は 58 です。

この値の 20% を取得する必要があります。

私が与える場合:

MySum * 20 /100, I get 11

私が与える場合:

((20 * CAST(MySum as decimal(6,2)))/100) , I get 11.60000

私が与える場合

Round(((20 * CAST(MySum as decimal(6,2)))/100), 2), I still get 11.60000

それが欲しいです、

結果が 11.6 の場合は 12 を表示し、結果が 11.4 の場合は 11 を表示する必要があります。

値を四捨五入したい。そのための機能はありますか?

4

4 に答える 4

36

SQLサーバーでROUND()(例を参照)関数を使用する

select round(11.6,0)

結果:

12.0

例2:

select round(11.4,0)

結果:

11.0

小数部分が必要ない場合は、次のようにできます

select cast(round(11.6,0) as int)
于 2012-10-03T10:39:27.077 に答える
1
CAST(Round(MySum * 20.0 /100, 0) AS INT)

ご参考までに

MySum * 20 /100、11 を取得します

これは、3 つのオペランドがすべて INT の場合、SQL Server が左から右に整数演算を実行し、すべての中間結果を切り捨てるためです。

58 * 20 / 100 => 1160 / 100 => 11 (truncated from 11.6)

また、レコードROUND(m,n)は、有効数字 n ではなく、小数点以下 n 桁まで結果を返します。

于 2012-10-03T10:39:01.013 に答える
1

ラウンド関数を確認し、length引数がどのように機能するかを確認してください。結果の精度の動作を制御します

于 2012-10-03T10:43:02.760 に答える