📅  最后修改于: 2023-12-03 15:24:36.790000             🧑  作者: Mango
在C#中,我们经常需要对小数进行截断操作,以得到某个特定位数的精度。然而,C#默认会对小数进行四舍五入,这可能会导致我们不想要的结果。那么如何在不四舍五入的情况下截断小数呢?本文将为您介绍两种方法:使用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);
}
}