Pha*_*oda 36 .net floating-point truncate
我想截断小数,如下所示
即
CMS*_*CMS 60
你可以使用Math.Round:
decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229
或者您可以使用带有N3 数字格式的 ToString .
string roundedNumber = number.ToString("N3");
编辑:由于您不想舍入,您可以轻松使用Math.Truncate:
Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
Bil*_*ard 17
double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;
当然,如果你试图截断舍入错误,这将不起作用,但它应该与你在示例中给出的值一起工作.请参阅此问题的前两个答案,详细了解为什么它有时不起作用.
截断任意小数位数的函数:
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;
}
这是一个不受整数溢出影响的扩展方法(就像上面的一些答案那样).它还为一些效率缓存了一些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;
}
| 归档时间: | 
 | 
| 查看次数: | 97210 次 | 
| 最近记录: |