How to remove decimal point from a decimal number

2020-04-07 05:51发布

问题:

I am trying to remove just the decimal point from a decimal number in c#?

For ex: My decimal number is 2353.61 I want 235361 as the result. My decimal number is 196.06 I want 19606as the result.

How can I do that?

回答1:

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.61;
int count = BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
d *= Math.pow(10, count);

Using this answer to get the number of decimals.



回答2:

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).



回答3:

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);


回答4:

Multiply it by ten? :-) You could also use Math.Round(). That will round the number to it's nearest one.



回答5:

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
        }
    }


回答6:

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.



回答7:

Here I have taken Decimal Value = 1.09, then we take the first index of value with first or default, then you can get value without decimals and without round off. please suggest in comment if any Issue.

var dec = 1.09; var op1 = Convert.ToDecimal(dec.ToString().Split('.').FirstOrDefault());



标签: c# decimal