Подтвердить что ты не робот

Что не так с литьем 0.0 удвоить?

У меня есть InvalidCastException, когда я пытаюсь сделать 0.0, чтобы удвоить, почему это так? Это нормально, когда я делаю (float)value вместо этого.

alt text

4b9b3361

Ответ 1

В общем случае, когда вы помещаете тип значения в object (называемый бокс), вам нужно удалить его с тем же типом значения. Вместо этого вы не можете преобразовать другой тип. Вот что здесь происходит.

Если вы действительно хотите преобразовать объект, вам сначала нужно его удалить. Скажем, ваше исходное значение было float, прежде чем вы разместили его в object:

double d = (double) (float) value;

Или используйте метод, предложенный другими, который использует Convert. Это имеет то преимущество, что оригинальный тип не должен быть известен.

Ответ 2

Это нормально. Если тип объекта float, вы не можете направить его на double, потому что они не одного типа:

object o = 1.0f;
double d = (double)o; // will throw an exception

Вам нужно его преобразовать:

double d = Convert.ToDouble(o);

Ответ 3

Поплавок помещен как объект. Таким образом, вы пытаетесь преобразовать коробчатый float в double. Вместо этого используйте Vyas convert - он намного более гибкий и всегда должен поступать правильно:

var val=Convert.ToDouble(value);

Ответ 4

используйте этот

var val=Convert.ToDouble(value);

Ответ 5

Вы не можете наложить произвольный объект на double.