如何將十進制值拆分爲兩個十進制值。 如果小數部分小於.50或大於.50的十進制數應該以這樣的方式分割,即第一個no應該只以.00或.50結束。第二個值應該包含剩餘的因子值。在sql server中將十進制值拆分爲十進制數值
ex. 19.97 should return 19.50 & 0.47
19.47 19.00 & 0.47
如何將十進制值拆分爲兩個十進制值。 如果小數部分小於.50或大於.50的十進制數應該以這樣的方式分割,即第一個no應該只以.00或.50結束。第二個值應該包含剩餘的因子值。在sql server中將十進制值拆分爲十進制數值
ex. 19.97 should return 19.50 & 0.47
19.47 19.00 & 0.47
你可以在「地板」到0.5的最高倍數由乘以2,呼籲FLOOR
,然後除以2。從那裏只是減去從原來的價值得到的餘數。
DECLARE @test decimal(10,7)
SELECT @test =19.97
SELECT
FLOOR(@test * 2)/2 AS base,
@test - FLOOR(@test * 2)/2 AS fraction
或減少重複
SELECT
base,
@test - base AS fraction
FROM (SELECT FLOOR(@test * 2)/2 AS base)
Declare @money money
Set @money = 19.97
Select convert(int,@money - (@money % 1)) as 'LeftPortion'
,convert(int, (@money % 1) * 100) as 'RightPortion'
你需要考慮的MODULO
operator in SQL Server.
SELECT
19.97 as myDecVal ,
19.97 % 0.5 AS decGreaterThan50,/*should return 0.47*/
19.97- (19.97 % 0.5) as roundedToNearestZeroPoint5 /*should return 19.50*/;
@DStanley:你確定嗎?我給出的鏈接表示否則:「模算術運算符可以在SELECT語句的選擇列表中使用,包括列名稱,數字常量或整數和貨幣數據類型類別的任何有效表達式或數字數據類型。」看到SQLFiddle演示:http://sqlfiddle.com/#!3/d41d8/23960 – 2013-10-29 15:23:50
你是對的 - 我以爲我最近嘗試了其他的東西,它沒有奏效。我刪除了我的評論。 –
觀察到,加倍0.5
給1
,這是一個整數。這就導致了一個簡單的算法:
floor(x)
和x-floor(x)
讓我們把你的數字爲例:
19.97 * 2 = 39.94
Whole part = 39, fractional part = 0.94
Dividing each part by 2 individually, we get
39/2 = 19.50
0.94/2 = 0.47
19.47 * 2 = 38.94
Whole part = 38, fractional part = 0.94
Dividing each part by 2 individually, we get
38/2 = 19.00
0.94/2 = 0.47
它完全劈裂的階乘部分.. –