📜  如何在不四舍五入的情况下截断小数 - C# (1)

📅  最后修改于: 2023-12-03 15:24:36.790000             🧑  作者: Mango

如何在不四舍五入的情况下截断小数 - C#

在C#中,我们经常需要对小数进行截断操作,以得到某个特定位数的精度。然而,C#默认会对小数进行四舍五入,这可能会导致我们不想要的结果。那么如何在不四舍五入的情况下截断小数呢?本文将为您介绍两种方法:使用Math.Floor和使用字符串格式化。

使用Math.Floor

Math.Floor方法可以将小数向下取整到最接近的整数。因此,我们可以利用这个方法来截断小数。以下是代码片段:

double num = 3.14159265358979323846;
int decimals = 3;
double truncatedNum = Math.Floor(num * Math.Pow(10, decimals)) / Math.Pow(10, decimals);

在上面的代码中,我们先定义了一个原始小数num和要保留的小数位数decimals。接着,我们将原始小数乘以10的decimals次幂,然后使用Math.Floor方法向下取整,最后再将结果除以10的decimals次幂,得到截断后的小数truncatedNum。

使用字符串格式化

另一种方法是使用字符串格式化,通过指定格式化字符串的方式来截断小数。以下是代码片段:

double num = 3.14159265358979323846;
int decimals = 3;
string format = "0." + new string('#', decimals);
double truncatedNum = double.Parse(num.ToString(format));

在上面的代码中,我们先定义了一个原始小数num和要保留的小数位数decimals。接着,我们使用字符串拼接的方式生成格式化字符串format,通过在小数点后加上#号,实现保留decimals位小数。最后,我们将原始小数转换成格式化后的字符串,再通过double.Parse方法将其转换为double类型的截断后的小数truncatedNum。

以上两种方法都可以实现小数的截断,具体使用哪种方法,可以根据具体场景选择。下面是完整代码片段:

using System;

class Program
{
    static void Main(string[] args)
    {
        double num = 3.14159265358979323846;
        int decimals = 3;

        // 使用Math.Floor
        double truncatedNum1 = Math.Floor(num * Math.Pow(10, decimals)) / Math.Pow(10, decimals);

        // 使用字符串格式化
        string format = "0." + new string('#', decimals);
        double truncatedNum2 = double.Parse(num.ToString(format));

        Console.WriteLine(truncatedNum1);
        Console.WriteLine(truncatedNum2);
    }
}