如何截断小数部分?

时间:2012-01-20 05:58:45

标签: c# algorithm class

我正在尝试截断小数部分。

我的意思是创建一个执行此操作的函数。

1 / 9~0.11111111111111

因此,如果在想要选取5位小数的函数集中,则必须返回0.11111

我是用字符串做的,但我想这不是一个好主意。有可能使用数学运算吗?

5 个答案:

答案 0 :(得分:5)

您可以使用

Math.Truncate

http://msdn.microsoft.com/en-us/library/7d101hyf.aspx

编辑:我的合适方法版本(虽然Gary已在下面分享了一个)

    public static double Truncate(double number, int digits) 
    { 
        double conversionFactor = (Math.Pow(10.0, digits));
        return Math.Truncate(number * conversionFactor) / conversionFactor;
    } 

答案 1 :(得分:2)

要按value截断给定nDecimals的小数部分,只需使用:

value = Math.Truncate(value * Math.Pow(10, nDecimals)) / Math.Pow(10, nDecimals);

因此,如果value = 1/9nDecimals = 5,则会返回0.11111

答案 2 :(得分:1)

由于Math.Truncate()不允许指定您要保留的位数,因此您必须首先乘以10^d,然后再次截断并除以10^d,其中d为要保留的小数位数。

答案 3 :(得分:1)

您可以使用像...这样的方法。

 private double TruncateAt(double number, double decimals)
    {
        double factor = Math.Pow(10, decimals);
        return Math.Truncate(number*factor)/factor;
    }

通过

调用方法
double x = TruncateAt(1.0 / 9.0, 5);

如果您的程序始终使用相同的因子,您可以将其设为const并获得性能提升......

答案 4 :(得分:0)

我不确定,特别是因为我暂时没有触及C#,但我认为你可以使用Math.Round?有点像它的使用方式here

那么,也许试试Math.Round(0.111111111, 6);