コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
USE [testDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DROP FUNCTION IF EXISTS [dbo].[usp_RoundDown]
GO
CREATE FUNCTION [dbo].[usp_RoundDown]
(
@Price MONEY,
@Digit INT
)
RETURNS MONEY
AS
BEGIN
-- Declare the return variable here
DECLARE @Result AS MONEY;
DECLARE @Place AS MONEY;
DECLARE @Sign AS INT;
--金額が0の場合は計算しない
IF @Price = 0
BEGIN
RETURN 0;
END;
--符号を取得
SET @Sign = 1;
IF @Digit < 0
BEGIN
SET @Sign = -1;
END;
--切り捨てる桁数により10の累乗を求める
SET @Place = POWER(10, ABS(@Digit));
SELECT @Result = CASE
--対象の数値が0以上で切り捨て桁が0以上の場合
WHEN @Price >= 0 AND @Sign >= 0 THEN
FLOOR(@Price * @Place) / @Place
--対象の数値が0以上で切り捨て桁が0未満の場合
WHEN @Price >= 0 AND @Sign < 0 THEN
FLOOR(@Price / @Place) * @Place
--対象の数値が0未満で切り捨て桁が0以上の場合
WHEN @Price < 0 AND @Sign >= 0 THEN
CEILING(@Price * @Place) / @Place
--対象の数値が0未満で切り捨て桁が0未満の場合
WHEN @Price < 0 AND @Sign < 0 THEN
CEILING(@Price / @Place) * @Place
END;
--計算結果を返す
RETURN @Result
END
GO
SELECT dbo.usp_RoundDown(1234.9876, -4);
SELECT dbo.usp_RoundDown(1234.9876, -3);
SELECT dbo.usp_RoundDown(1234.9876, -2);
SELECT dbo.usp_RoundDown(1234.9876, -1);
SELECT dbo.usp_RoundDown(1234.9876, 0);
SELECT dbo.usp_RoundDown(1234.9876, 1);
SELECT dbo.usp_RoundDown(1234.9876, 2);
SELECT dbo.usp_RoundDown(1234.9876, 3);
SELECT dbo.usp_RoundDown(1234.9876, 4);
SELECT dbo.usp_RoundDown(-1234.9876, -4);
SELECT dbo.usp_RoundDown(-1234.9876, -3);
SELECT dbo.usp_RoundDown(-1234.9876, -2);
SELECT dbo.usp_RoundDown(-1234.9876, -1);
SELECT dbo.usp_RoundDown(-1234.9876, 0);
SELECT dbo.usp_RoundDown(-1234.9876, 1);
SELECT dbo.usp_RoundDown(-1234.9876, 2);
SELECT dbo.usp_RoundDown(-1234.9876, 3);
SELECT dbo.usp_RoundDown(-1234.9876, 4);
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。