Pha*_*oda 36 .net floating-point truncate
我想截断小数,如下所示
即
CMS*_*CMS 60
你可以使用Math.Round:
decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229
Run Code Online (Sandbox Code Playgroud)
或者您可以使用带有N3 数字格式的 ToString .
string roundedNumber = number.ToString("N3");
Run Code Online (Sandbox Code Playgroud)
编辑:由于您不想舍入,您可以轻松使用Math.Truncate:
Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
Run Code Online (Sandbox Code Playgroud)
Bil*_*ard 17
double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;
Run Code Online (Sandbox Code Playgroud)
当然,如果你试图截断舍入错误,这将不起作用,但它应该与你在示例中给出的值一起工作.请参阅此问题的前两个答案,详细了解为什么它有时不起作用.
截断任意小数位数的函数:
public decimal Truncate(decimal number, int digits)
{
decimal stepper = (decimal)(Math.Pow(10.0, (double)digits));
int temp = (int)(stepper * number);
return (decimal)temp / stepper;
}
Run Code Online (Sandbox Code Playgroud)
这是一个不受整数溢出影响的扩展方法(就像上面的一些答案那样).它还为一些效率缓存了一些10的幂.
static double[] pow10 = { 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10 };
public static double Truncate(this double x, int precision)
{
if (precision < 0)
throw new ArgumentException();
if (precision == 0)
return Math.Truncate(x);
double m = precision >= pow10.Length ? Math.Pow(10, precision) : pow10[precision];
return Math.Truncate(x * m) / m;
}
Run Code Online (Sandbox Code Playgroud)