Zamiana int na double

0

Cześć,

napotykam na problem, na który nie mogę znaleźć odpowiedzi czemu tak się dzieje. Próbuję zamienić int na double poleceniem double.parse() i wyrzuca mi error.

int a;
Console.WriteLine("Podaj liczbę całkowitą:");
a = int.Parse(Console.ReadLine());
double b = double.Parse(a);       
Console.WriteLine(b);
Console.ReadKey();

wyświetla błąd przy tej linii:

double b = double.Parse(a);

dlaczego tak się dzieje?

Dziękuję z góry za odpowiedź.

5

Parse() przypadkiem nie przyjmuje stringa? Po co robisz int.Parse(Console.ReadLine()), skoro później ten wynik przerabiasz na double robiąc double.Parse()?

2

@koolzolio:

Parsowanie, i jest powszechne rozumienie, nie ma z tym wyjątków, to przetwarzania napisu / stringa na jakąś konkretną daną.

Naprawdę, szybciej dojdziesz do rezultatów po przeczytaniu porządnego wprowadzenia do języka, a nie zgadywaniu "bo mi się tak wydaje" (drugi twój wątek też jest z jakiś fikcyjnych wyobrażeń)

2

Nie wiem w jakim IDE programujesz, czy to Rider, VS czy VSC, ale w każdym możesz sobie podejrzeć jaka funkcje jakie argumenty i typy przyjmuje, tam będziesz wiedział czy wszystko na pewno jest ok. Dalej dokumentacje dużo robi:
https://learn.microsoft.com/pl-pl/dotnet/api/system.double.parse?view=net-6.0

I same wyjątki są dość dobre opisane, ten wyjątek mówi CI wszystko wystarczy go przeczytać i poszperać :)

2
Console.WriteLine("Podaj liczbę całkowitą: ");
int a = int.Parse(Console.ReadLine());
double b = (double)a;   
Console.WriteLine($"{b:.00}");

O to chodzi? Ten syntax (double)a i tak jest nie potrzebny, to wykona się pod spodem automatycznie.

2
int number = 2;
double = Convert.ToDouble(number);
0
Riddle napisał(a):
int number = 2;
double = Convert.ToDouble(number);

To coś jednak nie działa. Przy znaku równości pokazuje "Identifier expected".

KriZz37 napisał(a):
Console.WriteLine("Podaj liczbę całkowitą: ");
int a = int.Parse(Console.ReadLine());
double b = (double)a;   
Console.WriteLine($"{b:.00}");

O to chodzi? Ten syntax (double)a i tak jest nie potrzebny, to wykona się pod spodem automatycznie.

Tak, w ten sposób: double b = (double)a; też udało mi się później skonwertować a na double. Dziękuję za odpowiedź.

To są małe wielkie rzeczy dla mnie. Dziękuję za odpowiedzi.

1
koolzolio napisał(a):

wyświetla błąd przy tej linii:

double b = double.Parse(a);

dlaczego tak się dzieje?

W tym oraz innych przypadkach najeżdżasz myszą na otwierający nawias okrągły Parse i widzisz jakiego typu parametr jest wymagany oraz opis.
screenshot-20221103165037.png

0
_13th_Dragon napisał(a):
koolzolio napisał(a):

wyświetla błąd przy tej linii:

double b = double.Parse(a);

dlaczego tak się dzieje?

W tym oraz innych przypadkach najeżdżasz myszą na otwierający nawias okrągły Parse i widzisz jakiego typu parametr jest wymagany oraz opis.
screenshot-20221103165037.png

Tak, zgadza się więc trzeba zamienić a do stringa przez użycie a.ToString() i wtedy zadziała :) Dzięki za podpowiedź.

Wykorzystam jeszcze ten wątek. Czemu VS nie zamienia samej zmiennej int na double w tym przypadku (linia 3 i 4)?

        int a = 7;
        int b = 8;
        Convert.ToDouble(a);
        Convert.ToDouble(b);
        double c = a / b;
        Console.WriteLine("{0:F2}", c);
        Console.ReadKey();

Wynik c wychodzi 0, więc nie zmienił stałych a i b na double.

Dopiero jak dodam kolejne dane np. e i f i przypisze do nich tę funkcje convert.todouble (linia 3 i 4):

        int a = 7;
        int b = 8;
        double e = Convert.ToDouble(a);
        double f = Convert.ToDouble(b);
        double c = e / f;
        Console.WriteLine("{0:F2}", c);
        Console.ReadKey();

To wynik wyjdzie taki jak powinien, czyli 0.78.

0

Po kiego tak kombinować? Może przeczytaj najkrótszy kurs C# w google z pierwszych 10 stron wyszukiwania C# kurs podstawy

int a=7;
int b=8;
Console.WriteLine("{0:F2}",a/(double)b);
Console.ReadKey();
0
_13th_Dragon napisał(a):

Po kiego tak kombinować? Może przeczytaj najkrótszy kurs C# w google z pierwszych 10 stron wyszukiwania C# kurs podstawy

        int a=7;
        int b=8;
        Console.WriteLine("{0:F2}",a/(double)b);
        Console.ReadKey();

Tak to ja potrafię zrobić :)

Kombinuję - tak jak piszesz i szukam tutaj odpowiedzi na pytania. Nie ma nic złego imo ani w kombinowaniu, ani w szukaniu odpowiedzi.

0
koolzolio napisał(a):

Nie ma nic złego imo ani w kombinowaniu, ani w szukaniu odpowiedzi.

No właśnie "szukasz odpowiedzi" jak w dowcipie, którym mnie karmiono na studiach
inżynier wie.... mgr ... doktor wie gdzie szukać książek, a profesor wie, gdzie szukać doktora

jesteś na poziomie profesora

0

Odniosę się do tych komentarzy o czytaniu książek, kursach itd. Zgadzam się z Wami. Jestem na początku i im więcej czytam czy robię kursy, to pojawiają mi się pytania lub wymyślam przykłady, na które nie znajdę odpowiedzi w książce. Pozwoliłem sobie więc zadać kilka pytań na forum, ale jak widzę po odpowiedziach - tutaj pytań nie można zadawać na poziomie początkującym, dopiero po osiągnięciu wyższego poziomu.

1

@koolzolio:

int a = 7;
int b = 8;
Convert.ToDouble(a);
Convert.ToDouble(b);

Wykorzystam jeszcze ten wątek. Czemu VS nie zamienia samej zmiennej int na double w tym przypadku (linia 3 i 4)?

Metoda ToDouble z klasy Convert jak i wiele podobnych konwertuje wartość, a nie zmienną.

A zatem zamieniasz jakąś wartość typu int na double, ale nic nie robisz z tym otrzymanym double, nie przypisujesz go do niczego, a więc "leci w powietrze".

1 użytkowników online, w tym zalogowanych: 0, gości: 1