385 / 318 / 18
Регистрация: 26.05.2009
Сообщений: 2,696
1

Ошибка CS0019: Оператор "*" не может применяться к операндам типа "decimal" и "float"

12.09.2010, 17:13. Показов 12352. Ответов 5
Метки нет (Все метки)

Здравствуйте! Писал приложение и наткнулся на интересную ошибку (честно говоря, я не совсем понимаю причину такого ограничения.
В коде
C#
1
2
// float w1, w2, w0;
float s = this.numericUpDownX.Value * w1 + this.numericUpDownY.Value * w2 + w0;
Ошибка в
C#
1
this.numericUpDownX.Value * w1
и
C#
1
this.numericUpDownY.Value * w2
ошибка CS0019: Оператор "*" не может применяться к операндам типа "decimal" и "float"
Почему я не могу перемножить два этих типа (как и сложить, отнять, разделить)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2010, 17:13
Ответы с готовыми решениями:

Оператор "*" не может применяться к операндам типа "type" и "type"
public vector module() { return new vector(x * x + y * y + z * z); } ...

Оператор == не может применяться к операндам "группа методов" и "bool"?
public virtual bool IsInPointOfFall() { return true; } public void...

Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно"
Ошибка после преобразования метода на С++ к С#: "Неявное преобразование типа "int" в "bool"...

Ошибка: "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу "System.IConvertible"."
При запуске пишет, что "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу...

5
139 / 137 / 21
Регистрация: 26.01.2010
Сообщений: 350
12.09.2010, 17:34 2
C#
1
2
3
4
5
            float w1 = 5.23f, w2 = 4.012f, w0 = 10;
 
            float result = (float)this.numericUpDown1.Value * w1 + (float)this.numericUpDown1.Value * w2 + w0;
            
            MessageBox.Show(result.ToString());
0
385 / 318 / 18
Регистрация: 26.05.2009
Сообщений: 2,696
12.09.2010, 20:53  [ТС] 3
Да что делать в этой ситуации и детю понятно. Но почему нельзя выполнять таких действий?
0
Почетный модератор
Эксперт .NET
8713 / 3665 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
12.09.2010, 23:20 4
Цитата Сообщение от body90 Посмотреть сообщение
Но почему нельзя выполнять таких действий?
Может потому что decimal и float разные типы данных, и имеют разные размеры.
Код
Тип	|	Размер
----------------------------------
float	|	4 байта (32 бита)
double	|	8 байт (64 бита)
decimal	|	16 байт (128 бит)
0
385 / 318 / 18
Регистрация: 26.05.2009
Сообщений: 2,696
13.09.2010, 00:22  [ТС] 5
Но ведь, например, int можно умножить на float и т. д.
0
Почетный модератор
Эксперт .NET
8713 / 3665 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
13.09.2010, 00:31 6
Ну так int 4 байтный, и компилятор знает, что при умножении int на один из этих типов ничего не случится (данные не выйдут за пределы) и int будет неявно преобразован в float (и т.д.).

p.s.
Неявное преобразование - не требуется никакого специального синтаксиса, поскольку преобразование безопасно для типов и данные не теряются. Примерами могут служить преобразования от меньшего к большему целому типу, и преобразования из производных классов в базовые классы.
<- MSDN
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2010, 00:31
Помогаю со студенческими работами здесь

Переопределить операции "+" "=" "-" для экземпляров моего класса
Добрый день. Мне нужно переопределить операции &quot;+&quot; &quot;=&quot; &quot;-&quot; для экземпляров моего класса. Я вижу это...

Не удается преобразовать из типа "char" в тип "string"
Возникла необходимость отправить нескольким адресатам Email сообщение. Для этого я базу данных с...

Ошибка "Тип "MyPoint" создан из нескольких разделенных классов в одном и том же файле." при открытии дизайнера
Добрый день, формучане. У меня возникла необходимость добавления моего класса в коллекцию, для...

Rider C# 7.0 , ошибка компилятора : " Недопустимое значение "7" для /langversion;"
Установил недавно на чистую 10ку Rider 2017.3. Начал писать , в редакторе некоторые синтаксические...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru