Round
,Floor
およびCeil
のようなT-SQLの丸め関数をすべて読んでいますが、10進数は正しく切り捨てられていません。SQL Server 2008で小数点以下を切り捨てます
私は2つの質問持っている10進数(3.69
==>3.5
)を切り捨てる方法
- を?
- 整数の最後の3桁を切り上げる方法(例:
142600
==>143000
)?
Round
,Floor
およびCeil
のようなT-SQLの丸め関数をすべて読んでいますが、10進数は正しく切り捨てられていません。SQL Server 2008で小数点以下を切り捨てます
私は2つの質問持っている10進数(3.69
==>3.5
)を切り捨てる方法
142600
==>143000
)?1)select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))
は、最初のケースを処理する - 私は適合かつ迅速に確認answer to a similar question on SQL Server Forumsの礼儀。
なお、あなたが最も近い0.5
に丸めている数字があることができれば、より大きな(例えば333.69
=>333.5
)、あなたはキャストすると、よりdecimal
精度を指定してください(例:select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))
)、またはあなたがオーバーフローエラーを得ることができます:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
エクストラ精度(すなわちselect CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))
とselect CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))
両方が3.5
をもたらす)ボトムラインの結果に影響を及ぼさないであろう。丸めている数字が常に小さくなると無駄です。
T-SQL FLOOR
,CAST
およびdecimal
を参考にして、参考資料をオンラインで参照できます。
2)select ROUND(142600, -3)
が第2のケースを処理します。
同様のオンラインリファレンスがT-SQL ROUND
で利用可能です。 J0e3ganのanwser @ 1として
ありがとうございましたJ0e3gan.Itは正しく動作します! –
、Sql Server's Roundは、例えば、長さが10^(-length)
あるlength
パラメータを用いて、10の最も近いパワーに丸めることができ
length = 0 : 10^0 = nearest 1
length = 3 : 10^-3 = nearest .001
length = -3 : 10^3 = nearest 1000
など
しかし、単純な1ベースの丸め機能と、一般的に - 例えば(長さを持つSQLラウンド= 0)「に最も近いN」の任意の値に丸める - 式で:
round(X/N) * N
例えば最寄りの100
select round(12345/100.0, 0) * 100.0 -- 12300
select round(-9876/100.0, 0) * 100.0 -- -9900
select round(-9849/100.0, 0) * 100.0 -- -9800
...最寄りの0.5
select round(5.123/0.5, 0) * 0.5 -- 5.000
select round(6.499/0.5, 0) * 0.5 -- 6.500
select round(-4.499/0.5, 0) * 0.5 -- -4.50
...最寄りの0.02
select round(5.123/.02, 0) * .02 -- 5.12
select round(-9.871/.02, 0) * .02 -- -9.88
など
除数のために使用されるタイプが数値でなければならないことに注意してください/小数または浮動小数点数。
あなたのreply.allコードありがとうございます –
Oracle/PLSQL FLOOR
関数は、数値以下の最大の整数値を返します。 例:
FLOOR(7.9)
Result: 7
FLOOR(30.29)
Result: 30
FLOOR(-7.9)
Result: -8
udfと記述してください。 –