Truncating a number to specified decimal places

c#

Solution

You've answered the question yourself; it seems you just misunderstood what division by zero means. The correct way to do this is to multiply, truncate, then devide, like this:

decimal TruncateTo100ths(decimal d)
{
    return Math.Truncate(d* 100) / 100;
}

TruncateTo100ths(0m);       // 0
TruncateTo100ths(2.919m);   // 2.91
TruncateTo100ths(2.91111m); // 2.91
TruncateTo100ths(2.1345m);  // 2.13

There is no division by zero here, there is only division by 100, which is perfectly safe.

Problem

I need to truncate a number to 2 decimal places, which basically means chopping off the extra digits. Eg: ``` 2.919 -> 2.91 2.91111 -> 2.91 ``` Why? This is what SQL server is doing when storing a number of a particular precision. Eg, if a column is Decimal(8,2), and you try to insert/update a number of 9.1234, the 3 and 4 will be chopped off. I need to do exactly the same thing in c# code. The only possible ways that I can think of doing it are either: Using the stringformatter to "print" it out only two decimal places, and then converting it to a decimal, eg: ``` decimal tooManyDigits = 2.1345 decimal ShorterDigits = Convert.ToDecimal(tooManyDigits.ToString("0.##")); // ShorterDigits is now 2.13 ``` I'm not happy with this because it involves a to-string and then another string to decimal conversion which seems a bit mad. Using Math.Truncate (which only accepts an integer), so I can multiply it by 100, truncate it, then divide by 100. eg: ``` decimal tooLongDecimal = 2.1235; tooLongDecimal = Math.Truncate(tooLongDecimal * 100) / 100; ``` I'm also not happy with this because if tooLongDecimal is 0, I'll get a divide by 0 error. Surely there's a better + easier way! Any suggestions?

Original source

Related problems