Excel.Tips.Net ExcelTips (Menu Interface)

Maintaining Accuracy of Significant Digits

Ken asked if it is possible to maintain the number of significant digits on values entered into Excel. For instance, "12.345600" and "1.230".

The short answer, Ken, is that you cannot. Why? Because Excel always transforms everything to 15 significant digits internally. This, if you enter 12 or 12.0 or 12.00000, Excel always considers these the same as 12.0000000000000, even though this may not be technically correct in the truest mathematical sense. Further, since Excel converts everything to 15 significant digits, it truncates any trailing zeros in any numbers displayed using the General number format.

(It should be obvious from the above explanation that the terms "significant digits," "precision," and "number of decimal places" mean entirely different things. For instance, the number 12.000 has three decimal places, but has five significant digits. (I'm sure the math theorists in the audience will be all too glad to correct me if I am wrong.)

You can use a custom numeric format for individual cells, which will display your information using the proper number of significant digits, but this will not affect how Excel works internally. For instance, you could format a cell to display 12 or 12.0 or 12.00000, but this does not change the fact that Excel still considers all the numbers to be 12.0000000000000.

One way around this problem is to enter your numbers as text, by putting an apostrophe in front of them. In other words, instead of entering 12.0 you would enter '12.0. Excel then parses the entry as text (because of the apostrophe) and displays 12.0 in the cell. The only drawback to this approach is that you cannot directly reference the cell in all mathematical functions; some of them will return an error because you are including what Excel considers as text in the function. The easiest way to handle this is to make sure you include the =VALUE function as part of your overall formula. For instance, if you enter a number as text into cell B7, and then need to reference it in a formula, you could do it in this way:

=VALUE(B7) * 100

This works great for formulas with single-cell references. It does not work well for range references, however. If you need to do a sum or an average on a range of values entered as text, Excel will choke every time, returning an error based on what the function is trying to do.

This brings us to the second potential solution: maintaining either the significant digits or the number of decimal places separate from the actual value. For many technical mathematical purposes, this is the best way to handle the situation. For example, in column C you could enter your numbers, as numbers. Excel, of course, converts them internally to 15 significant digits. In column D you could enter various numbers that represent the number of decimal places you want applied to the values in column C. You could then use the values in column D to help in formulas that refer to the values in column C.

A final potential solution is to simply format each individual cell so that it shows only the number of decimal places that you want displayed. With the caveat noted above (that such formatting does not affect the internal representation of numbers by Excel), this might be the best solution. Of course, individually adjusting the display formatting of a couple of cells is easy, but doing so to a hundred or five hundred cells is a different story. This is where a macro can come in handy. Consider the following macro:

Sub SigPlaces()
Dim c As Range
Dim strcell As String, NumFormat As String, DecSep As String
Dim DecPtLoc As Integer, stringLen As Integer
Dim numDecPlaces As Long

DecSep = "."

For Each c In Selection.Cells
    strcell = c.Value
    If IsNumeric(strcell) Then
        NumFormat = "#0"
        DecPtLoc = InStr(strcell, DecSep)
        If DecPtLoc > 0 Then
            NumFormat = NumFormat & DecSep
            stringLen = Len(strcell)
            numDecPlaces = stringLen - DecPtLoc
            NumFormat = NumFormat & String(numDecPlaces, "0")
        End If
        c.Value = Val(strcell)
        c.NumberFormat = NumFormat
    End If
Next c
End Sub

If you enter your numbers as text (with the apostrophe, mentioned above), you can then select the cells and run this macro. The text entries are converted to numbers, and the formatting applied to those cells is changed so that the same number of decimal places is displayed as you entered in the text entry.

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2045) applies to Microsoft Excel 97, 2000, 2002, and 2003.

Related Tips:

Save Time and Supercharge Excel! Automate virtually any routine task and save yourself hours, days, maybe even weeks. Then, learn how to make Excel do things you thought were simply impossible! Mastering advanced Excel macros has never been easier. Check out Excel 2010 VBA and Macros today!


Leave your own comment:

  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*What is 5+3 (To prevent automated submissions and spam.)
           Commenting Terms

Comments for this tip:

Nigel    27 Apr 2013, 05:09
Of course, if you are creating an extra column, you could just set the first (visible) column as text so that it shows precisely what you typed, and the second column is just =value() of the first. This way, all formulae (including array formulae) refer to the hidden column but the displayed data is accurate...

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us


Advertise with Us

Our Privacy Policy

Our Sites


Beauty and Style




DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2016)



Home Improvement

Money and Finances


Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2016)

Our Products

Helpful E-books

Newsletter Archives


Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2016 Sharon Parq Associates, Inc.