2014-02-20 4 views
0

У меня есть элемент управления пользовательского интерфейса, который основан на двойном, а не десятичном значении.Как удалить десятичные знаки после третьего десятичного числа

Когда она должна возвращать значение 0.001 она возвращает значение 0.00100000004749745

Как преобразовать это в десятичной системе с правильным значением 0,001?

Обратите внимание, что я не пытаюсь отформатировать его как строку, просто получите правильное значение.

+4

Лучше всего начать использовать десятичную, когда вы заботитесь о том, что точность. Полноты десяти не имеют простых представлений в базе-2. Все конверсии и округление приведет к ошибке в какой-то момент. – n8wrl

+0

Согласен, но управление основано на двойном, и я не могу переписать элемент управления. Таким образом, я преобразовываю число, прежде чем на самом деле его использовать. –

ответ

3

просто использовать Math.Round Method (Decimal, Int32)

  double d = 0.00100000004749745; 
      double ma = Math.Round(d, 3); 
      //if you want it as a string 
      string s = ma.ToString(); 
+0

Я думаю, вам нужно добавить ToString туда, чтобы было показано только 3 dps – Liath

1
double d= 0.00100000004749745; 
String s=d.ToString("N3"); //gives you 0.001 
decimal dd=Convert.ToDecimal(s);//converts double value 0.001 into decimal 
0

попробовать это

double d= yourNum; 
String s=d.ToString("0.00"); 
+0

'" 0.000 "' then :) И конвертировать обратно в 'double'. Это довольно неэффективно. – CompuChip

+0

... и, скорее всего, снова будет ошибка округления! – n8wrl

+0

, о котором он не просит округления, он хочет получить число до двух знаков после запятой. –

0

Вы испытываете тот факт, что 0.1 не могут быть сохранены точно в double.

Если вы просто хотите дисплей результат в 3-х знаков после запятой, а не беспокоиться об ошибке с плавающей запятой просто использовать:

string s = dec.ToString("0.000"); 
0

вы можете найти подобный вопрос уже ответили здесь, используя Формат строки:

c# - How do I round a decimal value to 2 decimal places (for output on a page)

Это может быть простой способ решить проблему с помощью:

decimalVar.ToString ("#.###"); 

Для более сложных целей, это может быть использована, если вы хотите продолжать работать с десятичным значением:

decimal.Round(yourValue, 3, MidpointRounding.AwayFromZero); 
Смежные вопросы