double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;
, Конечно, это не будет работать, при попытке усечь погрешность округления, но она должна хорошо работать со значениями, которые Вы даете в своих примерах. См. первые два ответа на этот вопрос для получения дополнительной информации о том, почему он не будет иногда работать.
Можно использовать Математика. Раунд :
decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229
Или можно использовать ToString с числовым форматом N3 .
string roundedNumber = number.ToString("N3");
РЕДАКТИРОВАНИЕ: , Так как Вы не хотите округляться, можно легко использовать Математика. Усеченный :
Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
Какой формат Вы желаете вывод?
, Если Вы довольны строкой тогда, рассматривают следующий код C#:
double num = 3.12345;
num.ToString("G3");
результат будет "3.12".
Эта ссылка могла бы быть полезной при использовании.NET. http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
я надеюсь, что это помогает...., но если Вы не определяете, чем язык, Вы используете и формат, в котором Вы хотите вывод, трудно предложить соответствующее решение.
Попробуйте это:
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));
Может быть, еще одно быстрое решение может быть:
>>> float("%.1f" % 1.00001)
1.0
>>> float("%.3f" % 1.23001)
1.23
>>> float("%.5f" % 1.23001)
1.23001
Забудьте обо всем, просто посмотрите это
double num = 2.22939393;
num = Convert.ToDouble(num.ToString("#0.000"));
Функция для усечения произвольного числа десятичных дробей:
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;
}