Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
11 / 11 / 5
Регистрация: 08.09.2013
Сообщений: 88
1

Умножение типов данных decimal на число Pi

08.09.2013, 18:09. Показов 7412. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Выполняя задание по языку C#, столкнулся с тем, что мне нужно реализовать математические операции с большими числами. MSDN и Google предложили мне для этого пользоваться типом данных decimal. Все было хорошо, пока я не столкнулся с задачей нахождения площади треугольника по двум сторонам и углу между ними.
S = 1/2 * a * b * sin(c); угол между двумя сторонами.

Мой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
// Написать программу, производящую вычисление площади треугольника по заданным длинам двух сторон и величине угла между ними.
 
namespace Задание_8
{
    class Program
    {
        static void Main(string[] args)
        {
            
            decimal square; 
            decimal first_side;
            decimal second_side;
            double angle;
            decimal square;
            System.Console.WriteLine("Enter, please, both sides and angle between them");
            first_side = decimal.Parse(System.Console.ReadLine());
            second_side = decimal.Parse(System.Console.ReadLine());
            angle = double.Parse(System.Console.ReadLine());
            angle = Math.Sin(angle);
            square = Decimal.Multiply(first_side, second_side);
            square = Decimal.Multiply(square, 1/2);
            square = Decimal.Multiply(square, angle); //здесь ошибка
            System.Console.WriteLine("Our square is = " + square);
        }
    }
}
В итоге, возникает ошибка: error CS1503: Аргумент "2": преобразование типа из "double" в "decimal" невозможно.

Как только я не извивался, умножить decimal-число на что-то иное, кроме как на такое же число, у меня не выходит.
Помимо умножения на синусы и прочую тригонометрию, все плохо с числом Pi, Exp и т.д.
Кто-то может что-то подсказать? Буду благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2013, 18:09
Ответы с готовыми решениями:

Не работает запрос с одинаковыми типами данных c# decimal, SQL Server Decimal(18,2)
Здравствуйте, не понимаю почему не проходит запрос на бд, с одинаковыми типами данныхDecimal(18,2)...

Внутреннее представление типов данных VB6.0. Эквиваленты типов данных VB в C++
Добрый день. Интересует такой вопрос. Где можно почитать, посмотреть научные данные по внутреннему...

Задано 4 матрицы. Провести сложение, умножение, умножение на число
Задано 4 матрицы A,B,C,D размером 4х4.Вычеслить такие матрицы: F,G,T. G=3/4 A+B F=B*(2D) T=c/5

Вычислить факториал 100!, учитывая, что это число не поместится не в одном из типов данных
Вычислить факториал 100!, учитывая, что это число не поместится не в одном из типов данных Найти...

7
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
08.09.2013, 18:12 2
Цитата Сообщение от Victor Grey Посмотреть сообщение
мне нужно реализовать математические операции с большими числами. MSDN и Google предложили мне для этого пользоваться типом данных decimal.
decimal нужен для работы с точными цифрами, а не большими.

По теме: используйте каст, но тогда теряете пряники от высокой точности, т.к. при касте decimal в double точность потеряется.
0
11 / 11 / 5
Регистрация: 08.09.2013
Сообщений: 88
08.09.2013, 18:44  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
По теме: используйте каст, но тогда теряете пряники от высокой точности, т.к. при касте decimal в double точность потеряется.
Попытка перевести значение синуса угла в decimal приводит к ошибке error CS1503: Аргумент "2": преобразование типа из "double" в "decimal" невозможно, в той же строчке кода, что я указал в ОП-посте.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
// Написать программу, производящую вычисление площади треугольника по заданным длинам двух сторон и величине угла между ними.
 
namespace Задание_8
{
    class Program
    {
        static void Main(string[] args)
        {
            
            decimal square;
            decimal first_side;
            decimal second_side;
            double angle;
            System.Console.WriteLine("Enter, please, both sides and angle between them");
            first_side = decimal.Parse(System.Console.ReadLine());
            second_side = decimal.Parse(System.Console.ReadLine());
            [B]angle = double.Parse(System.Console.ReadLine());
            angle = Math.Sin(angle);
            System.Convert.ToDecimal(angle);[/B]
            square = Decimal.Multiply(first_side, second_side);
            square = Decimal.Multiply(square, 1/2);
            square = Decimal.Multiply(square, angle); //ошибка
            System.Console.WriteLine("Our square is = " + square);
        }
    }
}



При переводе Decimal в double имею error CS0019: Оператор "*" не может применяться к операндам типа "double" и "decimal":
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
// Написать программу, производящую вычисление площади треугольника по заданным длинам двух сторон и величине угла между ними.
 
namespace Задание_8
{
    class Program
    {
        static void Main(string[] args)
        {
            
            double square;
            decimal first_side;
            decimal second_side;
            double angle;
            System.Console.WriteLine("Enter, please, both sides and angle between them");
            first_side = decimal.Parse(System.Console.ReadLine());
            second_side = decimal.Parse(System.Console.ReadLine());
            angle = double.Parse(System.Console.ReadLine());
            angle = Math.Sin(angle);
            System.Convert.ToDouble(first_side);
            System.Convert.ToDouble(second_side);
            square = 1/2 * angle * first_side * second_side; //ошибка.
            System.Console.WriteLine("Our square is = " + square);
        }
    }
}


Как быть?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
08.09.2013, 18:55 4
Цитата Сообщение от Victor Grey Посмотреть сообщение
C#
1
System.Convert.ToDecimal(angle);
Эта строка ничего не делает.

Цитата Сообщение от Victor Grey Посмотреть сообщение
C#
1
square = Decimal.Multiply(square, angle);
C#
1
Decimal.Multiply(square, (decimal)angle);
Цитата Сообщение от Victor Grey Посмотреть сообщение
C#
1
square = Decimal.Multiply(square, 1/2);
1/2 = 0
1
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
08.09.2013, 19:26 5
Цитата Сообщение от kolorotur Посмотреть сообщение
т.к. при касте decimal в double точность потеряется
Так ведь можно наоборот - привести double к decimal. Тогда точность не потеряется.
0
11 / 11 / 5
Регистрация: 08.09.2013
Сообщений: 88
08.09.2013, 19:36  [ТС] 6
Все ошибки подправил, все заработало, благодарю
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
08.09.2013, 22:02 7
Цитата Сообщение от turbanoff Посмотреть сообщение
Так ведь можно наоборот - привести double к decimal
Так ведь я выше так и сделал, нет?
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
09.09.2013, 13:21 8
Цитата Сообщение от Victor Grey Посмотреть сообщение
мне нужно реализовать математические операции с большими числами. MSDN и Google предложили мне для этого пользоваться типом данных decimal
Позор им . Для операций с большими числами используйте BigInteger из System.Numerics.dll (появилась в .NET 4.0)
0
09.09.2013, 13:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2013, 13:21
Помогаю со студенческими работами здесь

Linq максимальное число decimal из таблицы
Имеется 2 таблицы. Продавец и продажи. нужно найти максимальную продажу для каждого продавца......

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: ...

Тип данных Decimal
VB6 не поддерживает этот тип данных. То есть переменную такого типа нельзя объявить напрямую. А...

Тип данных Decimal. Как использовать?
Максимальное число с которым я могу оперировать это 24159191040 (Long). Как преобразовать long или...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru