1

如何将十进制值拆分为两个十进制值。如果小数部分的小数部分小于 .50 或大于 .50 。它应该以这样的方式拆分,即第一个 no 应该仅以 .00 或 .50 结尾。第二个值应包含剩余的阶乘值。

ex.  19.97 should return 19.50 & 0.47
     19.47               19.00 & 0.47
4

4 回答 4

3

您可以通过乘以 2、调用FLOOR、然后除以 2 来“地板”到 0.5 的最高倍数。从那里只需从原始值中减去该值即可得到余数。

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 )
于 2013-10-29T15:15:06.120 回答
1
Declare @money money

Set @money = 19.97

Select  convert(int,@money - (@money % 1))  as 'LeftPortion'
       ,convert(int, (@money % 1) * 100)    as 'RightPortion'
于 2013-10-29T15:16:19.533 回答
1

观察加倍0.5得到1,这是一个整数。这导致了一个简单的算法:

  • 数字翻倍
  • floor(x)使用and将其拆分为一个整体和一个小数部分x-floor(x)
  • 将每个部分分别除以 2 以获得所需的结果。

让我们以您的数字为例:

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
于 2013-10-29T15:17:37.733 回答
0

您需要查看MODULOSQL 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*/;
于 2013-10-29T15:17:36.913 回答