获取c#Decimal中小数点右边的有效位数

时间:2017-02-16 03:46:20

标签: c# .net

我想要一个带有此签名的c#函数:

int GetSignificantNumberOfDecimalPlaces(decimal d)

调用时应该表现如下:

    GetSignificantNumberOfDecimalPlaces(2.12300m); // returns 3
    GetSignificantNumberOfDecimalPlaces(2.123m);   // returns 3
    GetSignificantNumberOfDecimalPlaces(2.103450m);  // returns 5
    GetSignificantNumberOfDecimalPlaces(2.0m); // returns 0
    GetSignificantNumberOfDecimalPlaces(2.00m); // returns 0
    GetSignificantNumberOfDecimalPlaces(2m); // returns 0

即。对于给定的小数,我想要小数点右边的有效小数位数。因此可以忽略尾随零。 我的后备是将小数转换为字符串,修剪尾随零,并以这种方式获得长度。但有更好的方法吗?

注意:我在这里可能错误地使用了“重要”一词。示例中所需的返回值应该有希望解释我在追求的内容。

4 个答案:

答案 0 :(得分:3)

这里有一些非常好的答案Parse decimal and filter extra 0 on the right?

decimal d = -123.456700m;

decimal n = d / 1.000000000000000000000000000000m;  // -123.4567m

int[] bits = decimal.GetBits(n);

int count = bits[3] >> 16 & 255; // 4        or byte count = (byte)(bits[3] >> 16);

答案 1 :(得分:2)

我可以帮助你做几个字符串操作同样的事情,这可能是你的问题的解决方案,无论如何考虑这个建议,希望它会帮助你

app.use(express.static(path.join(__dirname, 'client')));    // folder where angular will be installed
app.use(express.static(path.join(__dirname, 'client', 'src')));
app.use(express.static(path.join(__dirname, 'client', 'src', 'app')));
带有所有指定输入的

Working Example

答案 2 :(得分:0)

我认为之前已经回答了这个问题。 这可能会帮助您解决问题:stackoverflow.com/a/13493771/4779385

inject

希望它有所帮助!

答案 3 :(得分:0)

使用System;

使用System.Collections.Generic;

使用System.Linq;

使用System.Text;

使用System.Threading.Tasks;

命名空间NumberofOnes

{

public class Program

{

    static void Main(string[] args)

    {

        Console.WriteLine("enter numbers");

        decimal argument = Convert.ToDecimal(Console.ReadLine());

        double count = Convert.ToDouble(decimal.Remainder(argument, 1));

        string number = count.ToString();

        int decimalCount = 0;

        if (number.Length > 1)

        {

            decimalCount = number.Length - 2;

        }

        Console.WriteLine("decimal:" + decimalCount);

        Console.ReadKey();

    }

}

}

希望这项工作!!