How to display two digits after decimal point in SQL Server
Categories:
Mastering Decimal Precision: Displaying Two Digits After the Decimal Point in SQL Server

Learn various SQL Server techniques to format numeric data to precisely two decimal places, ensuring consistent and readable output for financial, scientific, and reporting applications.
Displaying numeric values with a specific number of decimal places is a common requirement in database applications, especially when dealing with financial data, measurements, or scientific calculations. In SQL Server, there are several methods to achieve this, each with its own nuances and use cases. This article will explore the most effective ways to format your numbers to exactly two decimal places, ensuring accuracy and presentation consistency.
Understanding Data Types and Precision
Before diving into formatting, it's crucial to understand how SQL Server handles numeric data types. The DECIMAL
and NUMERIC
data types are ideal for storing exact numeric values with a defined precision and scale. Precision is the total number of digits, and scale is the number of digits to the right of the decimal point. For floating-point numbers, FLOAT
and REAL
are used, but they can suffer from precision issues due to their approximate nature. When formatting for display, we often convert these types or manipulate their string representation.
classDiagram class NumericDataTypes { +DECIMAL(p,s) +NUMERIC(p,s) +FLOAT +REAL } class FormattingMethods { +CAST/CONVERT +FORMAT +STR +ROUND } NumericDataTypes --> FormattingMethods : "Can be formatted by" FormattingMethods --> DisplayOutput : "Produces formatted" DisplayOutput : "e.g., 123.45"
Relationship between SQL Server Numeric Data Types and Formatting Methods
Method 1: Using CAST and CONVERT for Decimal Precision
The CAST
and CONVERT
functions are fundamental for changing data types in SQL Server. When converting to DECIMAL
or NUMERIC
, you can specify the desired precision and scale. This is often the most robust method as it directly manipulates the numeric value before it's potentially converted to a string for display. SQL Server will handle rounding according to standard rules.
SELECT
CAST(123.45678 AS DECIMAL(10, 2)) AS CastExample,
CONVERT(DECIMAL(10, 2), 123.45678) AS ConvertExample,
CAST(123 AS DECIMAL(10, 2)) AS WholeNumberExample,
CAST(123.4 AS DECIMAL(10, 2)) AS SingleDecimalExample,
CAST(123.454 AS DECIMAL(10, 2)) AS RoundDownExample,
CAST(123.455 AS DECIMAL(10, 2)) AS RoundUpExample;
Using CAST and CONVERT to format numbers to two decimal places.
CAST
or CONVERT
to DECIMAL(p, s)
, SQL Server automatically handles rounding to the specified scale s
. Be mindful of the precision p
to avoid truncation if your numbers are very large.Method 2: The FORMAT Function (SQL Server 2012+)
For SQL Server 2012 and later, the FORMAT
function provides a more flexible and locale-aware way to format numbers. It uses .NET Framework formatting rules, allowing for custom format strings. This is particularly useful when you need to display trailing zeros or specific cultural number formats.
SELECT
FORMAT(123.45678, 'N2') AS FormatN2Example,
FORMAT(123, 'N2') AS FormatWholeNumber,
FORMAT(123.4, 'N2') AS FormatSingleDecimal,
FORMAT(123.454, 'N2') AS FormatRoundDown,
FORMAT(123.455, 'N2') AS FormatRoundUp,
FORMAT(123.45678, '#.00') AS CustomFormatExample;
-- Example with different cultures
SELECT
FORMAT(12345.67, 'N2', 'en-US') AS EnglishFormat,
FORMAT(12345.67, 'N2', 'de-DE') AS GermanFormat;
Using the FORMAT function for flexible decimal formatting, including locale support.
FORMAT
function is generally slower than CAST
or CONVERT
because it involves .NET Framework integration. Use it primarily for display purposes where performance is not a critical bottleneck, or when locale-specific formatting is required.Method 3: Using STR for String Conversion
The STR
function converts numeric data to character data with optional length and decimal parameters. While it can achieve two decimal places, it's less flexible than FORMAT
and can introduce leading spaces if the specified length is greater than the number's actual length. It also performs rounding.
SELECT
STR(123.45678, 10, 2) AS StrExample,
STR(123, 10, 2) AS StrWholeNumber,
STR(123.4, 10, 2) AS StrSingleDecimal,
STR(123.454, 10, 2) AS StrRoundDown,
STR(123.455, 10, 2) AS StrRoundUp;
Using the STR function to convert numbers to strings with two decimal places.
STR
function is a legacy function. For new development, FORMAT
(SQL Server 2012+) or CAST
/CONVERT
to DECIMAL
followed by CAST
to VARCHAR
are generally preferred due to better control and consistency.Method 4: Combining ROUND with CAST/CONVERT
If you need to explicitly control the rounding behavior before converting to a specific decimal type or string, the ROUND
function can be used. ROUND
allows you to specify the number of decimal places to round to. You can then CAST
or CONVERT
the result to ensure the final data type is appropriate.
SELECT
ROUND(123.45678, 2) AS RoundOnlyExample,
CAST(ROUND(123.45678, 2) AS DECIMAL(10, 2)) AS RoundThenCast,
CAST(ROUND(123, 2) AS DECIMAL(10, 2)) AS RoundWholeNumber,
CAST(ROUND(123.4, 2) AS DECIMAL(10, 2)) AS RoundSingleDecimal;
Using ROUND in conjunction with CAST for precise decimal control.
Each method has its strengths. For pure numeric manipulation and storage, CAST
or CONVERT
to DECIMAL(p, 2)
is often the best choice. For display purposes with flexible formatting and locale support, FORMAT
is powerful. STR
is a simpler, older function, and ROUND
offers explicit control over rounding before final conversion.