2009-04-15 11 views
0

こんにちは私はボスニア・ヘルツェゴビナから来ており、私たちの郡で最も小さい紙幣は0.05です。 政府は0.05または0.00で四捨五入しています。 そのため、指定した値の価格を四捨五入するためのSQL Scalar Valued関数を作成します。 解決策がいくつかあるので、私のクエリのリソースを節約できます。アドバイス 敬具コメントから0.05または0.00でMS SQLを丸めてください

編集中 ありがとうは:

  • 0,1,2,3,4はゼロ+ 1に行くゼロ
  • 5,6,7,8,9に行きます
+0

8,9,0,1,2はゼロに行きますか? 3,4,5,6,7は5に行く? – gbn

+0

こういうか0,1,2,3,4は0になり、5,6,7,8,9は0になります+ 1 – adopilot

+0

スイスでもラウンドしますが、これは切り捨てです – gbn

答えて

1

marc_sのおかげで、私はお金のデータ型に変更。

float vs decimal vs money datatype article and flowchart

ALTER FUNCTION dbo.ufnRound (@number money) 
RETURNS money 
AS 
BEGIN 
    RETURN FLOOR(@number*20)/20 
END 
GO 
SELECT dbo.ufnRound (1.22), dbo.ufnRound (1.23), dbo.ufnRound (1.27), dbo.ufnRound (1.28) 

-- gives 1.2 1.2 1.25 1.25 
+0

私は本当に使っていませんSQLアプリケーションで私の価格のための "FLOAT" ...... –

+0

良い点...私は投稿に急いでいた – gbn

+0

まだ何かが欠けていませんか?あなたは1.27から1.25に丸めています - 私がその投稿を理解している限り、あなたはそれを1.30に丸めるべきです - いいえ? –

4

あり、組み込みの何もないのです - しかし、それは作成するのは簡単です:

EDIT:

:-)あなたの特別な丸めニーズに適応が
create function dbo.RoundToFiveOrZero(@inputValue MONEY) 
returns MONEY 
as begin 
    return FLOOR((@inputValue + 0.05) * 20.0)/20.0 
end 

DECIMALまたはMONEYのデータ型を使用してください。どのデータにも最適です。結果として

select 
    dbo.RoundToFiveOrZero(1.51), 
    dbo.RoundToFiveOrZero(1.53), 
    dbo.RoundToFiveOrZero(7.33), 
    dbo.RoundToFiveOrZero(7.37), 
    dbo.RoundToFiveOrZero(7.39) 
あなたに1.50を与える

、1.50、7.30、7.40、7.40:

はこのようにそれを使用してください。

マルク・

関連する問題