2015-05-21 3 views
0

В моем режиме бритвы я использовал следующий код для округления значения модели «Бюджет» до ближайшего целочисленного значения. Значение модели «Бюджет» - это значение double?. Но при назначении окончательного значения для roundMyPrice визуальная студия дает ошибку.Проблема с литьем при округлении двойных значений

Почему я не могу использовать значение double? в качестве аргумента? Как я могу решить эту проблему?

@{ 
    double? budget = item.Budget; 
    double? myPrice = budget/count; 
    double roundMyPrice = Math.Round(myPrice, MidpointRounding.AwayFromZero); 
} 
+0

действительно ли существует тип данных 'double?'? – Stuart

+1

@Stuart: 'double?' Является сокращением для 'Nullable '. – Groo

+0

Отмечено. Благодаря!. – Stuart

ответ

1

double? (или Nullable<double>) может быть null, помните это.

Вариант 1

double? myPrice = budget/count; 
double roundMyPrice; 
if (myPrice.HasValue) 
{ 
    roundMyPrice = Math.Round(myPrice.Value, MidpointRounding.AwayFromZero); 
} 
else 
{ 
    // value is not presented 
} 

Вариант 2

MSDN: GetValueOrDefault

Если null 0 по вашей логике, вы можете использовать этот код:

double? myPrice = budget/count; 
double roundMyPrice = Math.Round(myPrice.GetValueOrDefault(), MidpointRounding.AwayFromZero); 
+0

В этом случае было бы разумнее проверить, имеет ли значение «бюджет». – Groo

0

Нет перегрузки для double? в Math.Round, поэтому вам необходимо передать double в качестве параметра. Также вам необходимо рассмотреть случай, когда ваш double? - null. Наконец, вам нужно сделать результат от Math.Round до double?.

double? budget = item.Budget; 
double? myPrice = budget/count; 
double? roundMyPrice = myPrice.HasValue ? (double?) Math.Round(myPrice.Value, MidpointRounding.AwayFromZero) : null;