HomeSearch | ## C# Decimal Type (decimal.Ceiling and Floor)These C# examples show the decimal number type. They use methods like decimal.Ceiling and Floor. | |

## Decimalaccurately stores numeric data. The .NET Framework offers this type for programs where rounding errors are harmful. Decimal stores large and small numbers with many digits after the decimal place. | ||

## Operators.The decimal type is a value type. It can be manipulated with the standard numeric operators in the C# language. These include the plus, minus, multiply and divide operators. Decimal also has other features, as we see later.
| C# program that uses decimal operators
using System;
class Program
{
static void Main()
{
decimal d = 1.0M;
// Test decimal.
if (d == 1.0M)
{
Console.WriteLine(d);
}
decimal y = 0.5M;
// Add decimal.
y += d;
Console.WriteLine(y);
// Subtract and multiply decimal.
y -= (d * 2);
Console.WriteLine(y);
}
}
Output
1.0
1.5
-0.5 | |

## Constants.If you want to know the maximum or minimum value, there is no need to look this up. Access the MaxValue and MinValue constants. You can also use the One, Zero, and MinusOne constants. | C# program that reveals decimal constants
using System;
class Program
{
static void Main()
{
Console.WriteLine(decimal.MaxValue);
Console.WriteLine(decimal.MinValue);
Console.WriteLine(decimal.One);
Console.WriteLine(decimal.Zero);
Console.WriteLine(decimal.MinusOne);
}
}
Output
79228162514264337593543950335
-79228162514264337593543950335
1
0
-1 | |

## Floor, Ceiling.When using decimal, you should call methods available on the decimal class instead of those in the Math class for accuracy reasons. When you take the ceiling of 1.1, you get 2. When you take the floor of that same number, you receive 1.Math.CeilingMath.Floor
| C# program that uses Ceiling and Floor methods
using System;
class Program
{
static void Main()
{
Console.WriteLine(decimal.Ceiling(1.1M));
Console.WriteLine(decimal.Floor(1.1M));
}
}
Output
2
1 | |

## Arithmetic.To improve the clarity of decimal manipulations, you can use the Add, Multiply, Subtract and Divide methods. Each of these methods receives two arguments. You can imagine the classic arithmetic operator in between the two arguments. | C# program that uses math methods
using System;
class Program
{
static void Main()
{
Console.WriteLine(decimal.Add(1.1M, 1.3M)); // Add
Console.WriteLine(decimal.Multiply(5.0M, 2.0M)); // Five times two
Console.WriteLine(decimal.Subtract(2.0M, 1.0M)); // Two minus one
Console.WriteLine(decimal.Divide(10M, 2M)); // Ten divided by two
}
}
Output
2.4
10.00
1.0
5 | |

## Remainder.When doing important computations with money, you may want to get the remainder of a division. The remainder is the part left over after the division completes. In this program, we show that the remainder of 2 divided by 1.5 is 0.5.
| C# program that uses Remainder method
using System;
class Program
{
static void Main()
{
// Remainder of 2 divided by 1.5 is 0.5
Console.WriteLine(decimal.Remainder(2.0M, 1.5M));
}
}
Output
0.5 | |

## Truncate.Another useful method you can invoke on the decimal type is the Truncate method. This method simply erases all the numbers after the decimal place. It doesn't take into consideration whether the number would be rounded up or rounded down. | ||

## This program showsthat when we truncate 4.55, we get the number 4. Truncate returns a value of type decimal. It is similar to casting down, as with (int), but has different behavior on values that cannot be represented with int.Int, uintCast, Int | C# program that uses Truncate method
using System;
class Program
{
static void Main()
{
// Truncate removes the digits after the decimal place.
Console.WriteLine(decimal.Truncate(4.55M));
}
}
Output
4 | |

## Negate.Negate makes positive decimals negative, and makes negative decimals positive. You could duplicate this functionality by multiplying by negative one, but this method is more self-documenting. | C# program that uses Negate method
using System;
class Program
{
static void Main()
{
// Makes positive numbers negative, and negative numbers positive.
Console.WriteLine(decimal.Negate(1.5M));
Console.WriteLine(decimal.Negate(-1.5M));
}
}
Output
-1.5
1.5 | |

## Round, MidpointRounding.The Round method on the decimal type is useful for many programs. The decimal.Round method by default rounds down or up to the specified decimal place. You can specify the MidpointRounding to further define the required behavior.
| C# program that uses decimal.Round method
using System;
class Program
{
static void Main()
{
// Round to one decimal place.
Console.WriteLine(decimal.Round(1.59M, 1));
// Demonstrate MidpointRounding enumeration.
Console.WriteLine(decimal.Round(2.5M, 0, MidpointRounding.ToEven));
Console.WriteLine(decimal.Round(2.5M, 0, MidpointRounding.AwayFromZero));
}
}
Output
1.6
2
3 | |

## Parse, TryParse.The decimal type lets you convert from strings to actual decimals. The decimal.Parse method will throw an exception if you feed it an incorrectly-formatted value. The decimal.TryParse method will handle errors by returning a false value.
| C# program that parses strings into decimals
using System;
class Program
{
static void Main()
{
// Use Parse on arguments that are always correct.
decimal value = decimal.Parse("100.01");
Console.WriteLine(value);
// Use TryParse when errors are expected.
decimal value2;
if (decimal.TryParse("perl", out value2))
{
Console.WriteLine("Not reached");
}
}
}
Output
100.01 | |

## Convert.Because the decimal type is 16 bytes, it is wasteful to store many decimals when you do not need that much accuracy. You can use the To* methods on the decimal type to convert to smaller memory representations of the number.
| C# program that converts from decimal type
using System;
class Program
{
static void Main()
{
const decimal input = 5;
// Convert this decimal into other compatible types.
Console.WriteLine(decimal.ToByte(input));
Console.WriteLine(decimal.ToDouble(input));
Console.WriteLine(decimal.ToInt16(input));
Console.WriteLine(decimal.ToInt32(input));
Console.WriteLine(decimal.ToInt64(input));
Console.WriteLine(decimal.ToSByte(input));
Console.WriteLine(decimal.ToSingle(input));
Console.WriteLine(decimal.ToUInt16(input));
Console.WriteLine(decimal.ToUInt32(input));
Console.WriteLine(decimal.ToUInt64(input));
}
}
Output
5
5
5
5
5
5
5
5
5
5 | |

## FromOACurrency, ToOACurrency.Decimal provides FromOACurrency and ToOACurrency. FromOACurrency receives an OA value and converts it into a decimal. ToOACurrency takes a decimal and converts it into an OA value. OA values are a Microsoft-specific encoding.
| ||

## Memory.How much memory does the decimal type use? As stated in this article, it requires 16 bytes. This site also contains a more detailed examination of the memory usage of the decimal type.Decimal Memory | ||

## Summary.The decimal type is a powerful and accurate representation for number data in memory. With its large selection of static methods, the decimal type is valuable for representing important quantities like amounts of money. | ||

Home Dot Net Perls | © 2007-2019 Sam Allen. All rights reserved. Written by Sam Allen, info@dotnetperls.com. |