Skip to main content

How to Floor a number to 0.05 increments in T-SQL

Say you've got a number like 72.26 and you want to round it or floor to the nearest 0.05


The first thing to do is divide it by the round number.  

  • For example, if you want 72.26 rounded to the nearest 0.05, this will show how many 0.05's there are in the number 
                72.26 / 0.05 = 1,445.2

                 From there, round or floor as needed

            eg,             

    • SELECT ROUND( 72.26 / 0.05  , 0 )   or 
    • SELECT FLOOR( 72.26 / 0.05  , 0 )
            Results in 1445.0


Then, multiply it by the round number 

  • This returns you to the original value, less then remainder (or to the next increment if it rounded up) 
        eg 
    • SELECT 0.05 * ROUND( 72.26 / 0.05  , 0 )  
      • Results in 72.25

Demonstration Code 

DECLARE @SourceValues TABLE
(
    [TestValue] DECIMAL(4, 2)
);

DECLARE @Increment DECIMAL(4, 2) = 0.0;

WHILE @Increment <= 0.1
BEGIN
    INSERT INTO @SourceValues
    VALUES
    (72 + @Increment);

    SET @Increment = @Increment + 0.01;
END;

SELECT [TestValue]
  , 0.05 * ROUND([TestValue] / 0.05, 0) [RoundValue]
  , 0.05 * FLOOR([TestValue] / 0.05) [FloorValue]
FROM @SourceValues;



Result
Original ValueRounded ValueFloor Value
72.0072.0000000072.00
72.0172.0000000072.00
72.0272.0000000072.00
72.0372.0500000072.00
72.0472.0500000072.00
72.0572.0500000072.05
72.0672.0500000072.05
72.0772.0500000072.05
72.0872.1000000072.05
72.0972.1000000072.05
72.1072.1000000072.10

Comments

Popular posts from this blog

Changing Password - in AD, when you're changing one of your other accounts, not the logged in account

  Use Powershell  Step 1 - Put your existing password in a Secure String  $oldPassword = Read-Host "Your old Password" -AsSecureString  Step 2 - Start the password change set-AdAccountPassword -Identity paul-admin -OldPassword  $oldPassword Step 3 - Enter your new password You'll be prompted for your new password... Please enter the desired password for 'CN=xxxx,OU=Admin Users,OU=Users,OU=Privileged,DC=CAIS,DC=com,DC=edu,DC=au' Password: ************************** Repeat Password: **************************

Tip to create an underline on a heading shorter than the heading itself

You can use a pseudo element with :before (or :after ): h1 { font - weight : 300 ; display : inline - block ; padding - bottom : 5px ; position : relative ; } h1 : before { content : "" ; position : absolute ; width : 50 %; height : 1px ; bottom : 0 ; left : 25 %; border - bottom : 1px solid red ; } http://jsfiddle.net/9e27b/ This is another solution that centers the heading, the problem here is that the underline gets shorter as the column gets shorter. h2 {   display: inline-block;   padding-bottom: 15px;   position: relative;   width: 100% ;   text-align: center; } h2:before{     content: "";     position: absolute;     width: 8%;     height: 1px;     bottom: 0;     left: 46%;     border-bottom: 1px solid red; }

The web.config no extension mime problem Lets Encrypt on IIS/Windows

  Tip when using LetsEncrypt in Windows - Feature Requests - Let's Encrypt Community Support In a paragraph, just use the web.config file to set the mime type, eg...  After trying to figure out why my Lets Encrypt failed to generate in Windows, and discovering that it's the no extension mime type problem, I wondered whether certbot could fill in the missing gap. All that is needed is the following web.config file to be placed in the same directory as the challenge <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <mimeMap fileExtension="." mimeType="text/xml" /> </staticContent> </system.webServer> </configuration> Because there's no mime type for files without an extension on IIS, IIS sends back a 404 when verification happens. The web.config file above sets the mime type. After I created the .well-known