Zamiana int na double

Zamiana int na double
KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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.

Kopiuj
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:

Kopiuj
double b = double.Parse(a);

dlaczego tak się dzieje?

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

AdamWox
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Jastrzębie-Zdrój
  • Postów: 2180
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()?

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
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ń)

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 217
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ć :)

KriZz37
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
2
Kopiuj
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.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2
Kopiuj
int number = 2;
double = Convert.ToDouble(number);
KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
Riddle napisał(a):
Kopiuj
int number = 2;
double = Convert.ToDouble(number);

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

KriZz37 napisał(a):
Kopiuj
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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
koolzolio napisał(a):

wyświetla błąd przy tej linii:

Kopiuj
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

KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
_13th_Dragon napisał(a):
koolzolio napisał(a):

wyświetla błąd przy tej linii:

Kopiuj
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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
int a=7;
int b=8;
Console.WriteLine("{0:F2}",a/(double)b);
Console.ReadKey();
KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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

Kopiuj
        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.

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
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

KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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.

WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5227
1

@koolzolio:

Kopiuj
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".

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.