当前位置: 代码迷 >> Sql Server >> 小数点前一位大于0就进一位解决思路
  详细解决方案

小数点前一位大于0就进一位解决思路

热度:70   发布时间:2016-04-24 09:10:07.0
小数点前一位大于0就进一位
财务的要求,想多收点客户的钱

比如
212
就得到220


211.5也是220


------解决思路----------------------
如果想精确到十位数,写个函数吧,如果个位数和小数点不等于0 ,则把个位数设置为0,十位数+1,取整
------解决思路----------------------

USE [AdventureWorks2012];
GO
DECLARE @DecadeFlag        TINYINT   =   10 ; -- 定义需要进位的位置.注意数据类型变化,这里只到10分位,则定义为了TINYINT
DECLARE @PrecisionFlag      MONEY =   1.0000 ; -- 定义需要的显示的精度

SELECT 
        [SOD].[LineTotal]
        ,   CEILING([SOD].[LineTotal]/@DecadeFlag)*@DecadeFlag  * @PrecisionFlag AS 'NewLineTotal'

  FROM [AdventureWorks2012].[Sales].[SalesOrderDetail] AS [SOD]
 WHERE [SOD].[SalesOrderID]             = 64574 ;

/*
结果
 LineTotal      NewLineTotal
------------   ------------------
35.000000    40.0000
4.990000     10.0000
21.980000    30.0000
34.990000    40.0000
*/

------解决思路----------------------
declare @i money

set @i=34.9999



print ceiling(@i/10)*10

------解决思路----------------------

USE [AdventureWorks2012];
GO
DECLARE @DecadeFlag         TINYINT  ; -- 定义需要进位的位置.注意数据类型变化,这里只到10分位,则定义为了TINYINT
DECLARE @PrecisionFlag      MONEY  ; -- 定义需要的显示的精度
--赋值
SET @DecadeFlag    = 10                      ;
SET @PrecisionFlag = 1.0000              ;
SELECT 
            [SOD].[LineTotal]
        ,   CEILING([SOD].[LineTotal]/@DecadeFlag)*@DecadeFlag  * @PrecisionFlag    AS    'NewLineTotal'
 
  FROM [AdventureWorks2012].[Sales].[SalesOrderDetail]    AS    [SOD]
 WHERE [SOD].[SalesOrderID]             =    64574 ;
 
/*
结果
 LineTotal      NewLineTotal
------------   ------------------
35.000000       40.0000
4.990000        10.0000
21.980000       30.0000
34.990000       40.0000
*/
  相关解决方案