Introduction
Many times while working on applications, we often land into a situation where we want to truncate the decimal places from a number instead of round like suppose we have 5.329 and I want to truncate the third digit then my required output will be 5.32. Here, I will walk through the different ways which I know in which we can achieve the same.
Approaches
I have created the approaches as making the C# method.
1. Truncate the decimals through the string operations.
Below method only usable if you want to truncate the decimal places to two.
1: #region Round
2: /// <summary>
3: /// Truncate the last digit after two digit floating points.
4: /// </summary>
5: /// <param name="value">A double-precision floating-point number to be rounded.</param>
6: /// <returns>Double value contains two digit floating points.</returns>
7: public static double Round (double value)
8: {9: double returnValue = 0;
10: 11: try
12: {13: //Convert the value into the string for round.
14: string input = Convert.ToString(value);
15: 16: //Check if the input contains decimal places
17: if (input.Contains("."))
18: {19: //Check if there are 3 or more digits after the decimal point.
20: if (input.Length - input.IndexOf(".", StringComparison.Ordinal) >= 4)
21: {22: //Replace the input value with the required value. Added 3 to get only 2 digits after the decimal point.
23: input = input.Substring(0, input.IndexOf(".", StringComparison.Ordinal) + 3);
24: } 25: }26: //Converts the string representation of a number to its System.Double equivalent.
27: returnValue = Convert.ToDouble(input); 28: }29: catch { } //Suppress exception no need to handle.
30: 31: return returnValue;
32: }33: #endregion
2. Truncate the decimals through the mathematical operations.
Through this method you can truncate any number of decimal places.
1: #region Round
2: /// <summary>
3: /// Rounds a decimal value to a specified number of fractional digits.
4: /// </summary>
5: /// <param name="value">A decimal number to be rounded.</param>
6: /// <param name="decimals">The number of decimal places in the return value.</param>
7: /// <returns>The number nearest to value that contains a number of fractional digits equal to decimals.</returns>
8: public static double Round(double value, byte decimals)
9: {10: double returnValue = 0;
11: 12: try
13: {14: if (value != 0)
15: {16: //Gets the power of 10 base on passed decimal parameter value (10^decimals).
17: double powValue = Math.Pow(10, decimals);
18: 19: //Gets the truncated value.
20: returnValue = Math.Truncate(CDCommon.ToDouble(value * powValue)) / powValue;
21: } 22: }23: catch
24: { throw; }
25: 26: return returnValue;
27: }28: #endregion
Conclusion
From both the ways, as per my opinion prefer the second approach in implementation because it’s very light compared to the first in terms of calculations.
