Solved

decimel help

Posted on 2014-10-22
13
167 Views
Last Modified: 2014-10-25
Hello All,

I have a table where a column is gets updated by the division of a column from another table by any denominator value between 3 and 9. So it could be metric column / 3  or metriColumn/4 , etc.

Now in terms of the maximum of decimals for highest accuracy – s – what should be used? Wen creating that table to store the division result column – I am using –
CREATE TABLE [dbo].[myTable](
            [divisionResults] [decimal](18, 4) NULL
) ON [PRIMARY]

 I want to use storage type that allows me the maximum decimal places after zero but also doesn’t compromise the query efficiency or speed or that I am “overkilling” it
0
Comment
Question by:Rayne
  • 4
  • 4
  • 3
  • +1
13 Comments
 
LVL 46

Expert Comment

by:Vitor Montalvão
ID: 40398670
You can see the precision for decimal data type here and as far as I know the precision doesn't impact the query performance.
0
 
LVL 38

Expert Comment

by:Aaron Tomosky
ID: 40399656
One additional thing to rember is when you do math in sql with an int and a decimal, depending on the specific order of the numbers (decimal/int , int/decimal) you can get the result as an int when you want a decimal.
http://www.experts-exchange.com/Database/MS-SQL-Server/Q_24432624.html

I prefer to explicitly cast my int as a decimal but there are lots of ways.
Decimal / cast (int as decimal(18,4)
0
 
LVL 46

Expert Comment

by:Vitor Montalvão
ID: 40399717
depending on the specific order of the numbers (decimal/int , int/decimal) you can get the result as an int when you want a decimal.
That's not true. In both case the result will be always a decimal.
Only if the operation is int/int that the result will be int.
0
 
LVL 38

Expert Comment

by:Aaron Tomosky
ID: 40400122
whoops, that's right. I've just gotten in the habit of casting everything to avoid odd issues.
http://improve.dk/tricky-sql-server-decimal-math/
0
 

Author Comment

by:Rayne
ID: 40400557
[myResults] [decimal](18, 4) NULL
so whats the max number of decimel that i can use? instead of 4 like up till 12 or more?
0
 
LVL 38

Expert Comment

by:Aaron Tomosky
ID: 40400567
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 

Author Comment

by:Rayne
ID: 40400656
please suggest a valid one - this is leading to arithmetic overflow
0
 

Author Comment

by:Rayne
ID: 40400659
all eexperts - please suggest whats your best practise of using which one decimel ? i dont want my program to crash
0
 
LVL 38

Assisted Solution

by:Aaron Tomosky
Aaron Tomosky earned 50 total points
ID: 40400742
in your example (18,4) that means 18 total digits, 4 to the right of the decimal point. Unless you care about more digits to the right of the decimal point, that should be fine for numbers up to 99 trillion (99,999,999,999,999.9999)
0
 
LVL 46

Assisted Solution

by:Vitor Montalvão
Vitor Montalvão earned 50 total points
ID: 40401165
all eexperts - please suggest whats your best practise of using which one decimel ? i dont want my program to crash
There's no best practice but client/business demands. What's the precision that they need? You just need this answer to set the best data type.
0
 
LVL 16

Accepted Solution

by:
DcpKing earned 400 total points
ID: 40401882
As Aaron and Vitor say, you select your total number of digits and your number of decimal places within that, For example, if you're working with something like national expenditures then 18,4 might be good. OTOH, for chemical analyses something like 18,12 might be more appropriate.

As others have noted, use a decimal value as your denominator, if for no other reason than to make everything clear to subsequent readers of your code. If you are working with large amounts of data then every calculation will include an implicit conversion if you leave it as an integer. While this probably won't be as expensive as dividing by '4' (as a varchar or char) it will still incur some extra overhead.

hth

Mike
0
 

Author Closing Comment

by:Rayne
ID: 40403538
Thank you Sire Mike and the other Gurus, thank you
0
 
LVL 16

Expert Comment

by:DcpKing
ID: 40404442
"Sire Mike" !! LOL!!!

I appreciate the thought.  --  Mike
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
Microsoft Office Picture Manager was included in Office 2003, 2007, and 2010, but not in Office 2013. Users had hopes that it would be in Office 2016/Office 365, but it is not. Fortunately, the same zero-cost technique that works to install it with …
The viewer will learn how to use a discrete random variable to simulate the return on an investment over a period of years, create a Monte Carlo simulation using the discrete random variable, and create a graph to represent the possible returns over…
Learn how to make your own table of contents in Microsoft Word using paragraph styles and the automatic table of contents tool. We'll be using the paragraph styles in Word’s Home toolbar to help you create a table of contents. Type out your initial …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now