I am trying to remove just the decimal point from a decimal number in C#.
For example:
- My decimal number is
2353.61
I want235361
as the result. - My decimal number is
196.06
I want19606
as the result.
How can I do that?
I am trying to remove just the decimal point from a decimal number in C#.
For example:
2353.61
I want 235361
as the result.196.06
I want 19606
as the result.How can I do that?
I would simply get the number of decimals and multiply it by the correct power of 10. Probably not really a concern but this also would be faster and use less memory then casting it to a string splitting / recombining it, then casting it back to a double. This also works for any number of decimal places.
decimal d = 2353.61M;
int count = BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
d *= Convert.ToDecimal(Math.Pow(10, count));
Using this answer to get the number of decimals.
If you always want the printed value to include 2 digits for consistency, you can just multiple by 100 and truncate the result.
value = Math.Truncate(value * 100m);
This would provide the value you specified in both cases, but also provide a similar result for 2353.6
(-> 235360
).
Maybe something like this(if the dot is in an unknown place - otherwise it's a simple multipication):
string str = decNum.ToString().Replace(".",string.Empty);
decimal dec = decimal.Parse(str);
Multiply it by ten? You could also use Math.Round()
. That will round the number to it's nearest one.
Here it is:
public decimal RemoveDecimalPoints(decimal d)
{
try
{
return d * Convert.ToDecimal(Math.Pow(10, (double)BitConverter.GetBytes(decimal.GetBits(d)[3])[2]));
}
catch (OverflowException up)
{
// unable to convert double to decimal
throw up; // haha
}
}
A simple solution would be:
while((int)n != n) n *= 10;
Multiplying the number by 10 moves the decimal point 1 place to the right. You need to repeat this multiplication until there are no more numbers on the right side. To detect if there are more numbers on the right, you simply cast it to int
, which drops the decimal part.
This will get you the value. Works in all cases, including negatives.
public int RemoveDecimalPoints(
decimal value)
{
var array = value.ToString().Split('.');
var isPoint = array.Length == 2;
var dec = array.FirstOrDefault() + (isPoint ? array.LastOrDefault() : "");
return int.Parse(dec);
}