您可以使用Math.Round:
decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229
或者您可以将 ToString 与 N3 数字格式一起使用。
string roundedNumber = number.ToString("N3");
编辑:由于您不想舍入,因此可以轻松使用Math.Truncate:
Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;
当然,如果您尝试截断舍入误差,这将不起作用,但它应该可以与您在示例中给出的值配合使用。请参阅此问题的前两个答案,了解有关为什么它有时不起作用的详细信息。
这是一个不会遭受整数溢出的扩展方法(就像上面的一些答案一样)。它还缓存一些 10 的幂以提高效率。
readonly 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 ? pow10[precision] : Math.Pow(10, precision);
return Math.Truncate(x * m) / m;
}
截断任意小数位数的函数:
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;
}
这与上面的 TcKs 建议类似,但使用 math.truncate 而不是 int 转换
VB:但你会明白的
Private Function TruncateToDecimalPlace(byval ToTruncate as decimal, byval DecimalPlaces as integer) as double
dim power as decimal = Math.Pow(10, decimalplaces)
return math.truncate(totruncate * power) / power
end function
您想要什么格式的输出?
如果您对字符串感到满意,请考虑以下 C# 代码:
double num = 3.12345;
num.ToString("G3");
结果将是“3.12”。
如果您使用 .NET,此链接可能有用。 http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
我希望这会有所帮助......但是除非您确定您正在使用的语言以及您想要输出的格式,否则很难提出适当的解决方案。
也许另一个快速解决方案是:
>>> float("%.1f" % 1.00001)
1.0
>>> float("%.3f" % 1.23001)
1.23
>>> float("%.5f" % 1.23001)
1.23001
试试这个
double d = 2.22912312515;
int demention = 3;
double truncate = Math.Truncate(d) + Math.Truncate((d - Math.Truncate(d)) * Math.Pow(10.0, demention)) / Math.Pow(10.0, demention);
试试这个:
decimal original = GetSomeDecimal(); // 22222.22939393
int number1 = (int)original; // contains only integer value of origina number
decimal temporary = original - number1; // contains only decimal value of original number
int decimalPlaces = GetDecimalPlaces(); // 3
temporary *= (Math.Pow(10, decimalPlaces)); // moves some decimal places to integer
temporary = (int)temporary; // removes all decimal places
temporary /= (Math.Pow(10, decimalPlaces)); // moves integer back to decimal places
decimal result = original + temporary; // add integer and decimal places together
可以写得更短,但是这样更具有描述性。
编辑:简短的方式:
decimal original = GetSomeDecimal(); // 22222.22939393
int decimalPlaces = GetDecimalPlaces(); // 3
decimal result = ((int)original) + (((int)(original * Math.Pow(10, decimalPlaces)) / (Math.Pow(10, decimalPlaces));
忘记一切,看看这个
double num = 2.22939393;
num = Convert.ToDouble(num.ToString("#0.000"));