Permalänk
Medlem

C# Avrunda flyttal

Hej,

Återigen en enkel övn som är för svår för en annan...
Den funkar som jag vill nu, men hur får jag in undantagshantering? TryCatch, TryParse etc? Hilfe!!!
Ok att skriva om den helt om det finns bättre sätt.

static void Main(string[] args) { string tal; Console.WriteLine("Mata in ett tal med flera decimaler: "); tal = Console.ReadLine(); double decimaltal = double.Parse(tal); Console.WriteLine("{0} ---> {1}", decimaltal, Math.Round(decimaltal,2)); Console.ReadLine(); }

Permalänk
Inaktiv

Hur tror du att du ska göra? Här är några frågor du kan börja fundera på:

1. Hur fångar man en exception?
2. Hur kastar man en exception?
3. Vad händer när double.Parse misslyckas?
4. Vad returnerar double.TryParse och vad händer om den misslyckas?

Permalänk
Medlem
Skrivet av anon81912:

Hur tror du att du ska göra? Här är några frågor du kan börja fundera på:

1. Hur fångar man en exception?
2. Hur kastar man en exception?
3. Vad händer när double.Parse misslyckas?
4. Vad returnerar double.TryParse och vad händer om den misslyckas?

googlat sönder nätet, men kommer ej fram till en lösning.
Vet det är superlätt men jag är så sjukt jevla dålig på programmering )))

Permalänk
Hedersmedlem
Skrivet av micke_mj:

googlat sönder nätet, men kommer ej fram till en lösning.
Vet det är superlätt men jag är så sjukt jevla dålig på programmering )))

Du frågar om ganska basic saker, så jag skulle vilja säga att antingen kan du prova att googla igen eller så kan du ge upp denna kursen. Du har ju redan fått rätt på lämpliga metoder att använda.

Sätt dig ner och lär dig använda Microsoft's MSDN-sidor. Det är första resultatet när du googlar "C# TryParse". Väljer du ett av alternativen till anrop av TryParse så får du upp fina kodexempel som bör förklara ganska bra hur TryParse funkar.

Jag kan egentligen bara se en sak som kan gå snett, och det är parsningen av talet som användaren matar in. All form av användarinteraktion är alltid en risk. Därmed behöver du inte lägga in ett try-catch block, men det kan ses om god sed att göra det i alla fall för att fånga andra eventualiteter. En stack-trace i nyllet på användaren är det sämsta som kan hända i mina ögon. Min personliga åsikt är det oftast är bättre att bygga bort kända problem, som nu med TryParse, än att förlita sig på try-catch.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Det är en liten tröskel att ta sig över, men detta är lite grundläggande kunskap och fuskar du här så kommer du att få det ännu besvärligare framöver.

0.9. Vad är en exception?

Tips: double.Parse() gör det, men inte double.TryParse()
Tips 2: Jobbar du i Visual Studio så kan du sätta markören på en metod, tex .Parse(), och trycka F12 så kan du se en massa bra info om just den metoden, tex vad den returnerar

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem

Jag tror en viktig fråga här är, vill du lära dig, eller vill du ha svaret?

Permalänk
99:e percentilen

Bryt ut själva avrundningsfunktionaliteten till en egen, pure funktion till att börja med! Det underlättar själva utvecklingen och ger generellt mycket bättre kodkvalitet överlag att lägga så stor andel av koden som möjligt i pure functions.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Permalänk
Medlem

Du måste nog sluta googla och sätta dig med denna kodsnutt och verkligen försöka ta reda på vad den gör och varför.
Inte genom att googla, utan genom att testa och experimentera med koden du har.
Tex hur får jag den att krasha och varför krashar den. Och lika viktigt att fråga sig är: nu funkar det och varför gör det det?

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Inaktiv
Skrivet av micke_mj:

googlat sönder nätet, men kommer ej fram till en lösning.
Vet det är superlätt men jag är så sjukt jevla dålig på programmering )))

Då hjälper jag dig med den första.

En exception kan kastas av metoder, närsomhelst, och "bubblar" därefter uppåt tills någon fångar den. Fångas den aldrig kraschar programmet.

try { MethodThatThrows(); } catch (Exception e) { Console.WriteLine(e.Message); }

Exempelvis skulle man kunna använda detta för att hantera att double.Parse(string number) inte lyckas parsa strängen och därmed kastar en exception.

Du kan garanterat lösa 2. Googla på "throw exception c#". Det är exakt precis frågan och första träffen kommer beskriva det i detalj.
Gillar du inte att söka på internet kan du börja här och leta dig vidare https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...
Delen om just exceptions förklarar det mesta för dig.

Klarar du inte av att söka på minsta lilla eller slå upp i din bok, där det står direkt så kommer du garanterat misslyckas med kursen och ingen här kommer vilja hjälpa dig mer.

Annars får du fråga din lärare eller dylikt.

Lyckas du lösa fråga 2 kan jag tänka mig att hjälpa dig på traven med fråga 3 och 4.

Permalänk
Medlem
Skrivet av waswasd:

Jag tror en viktig fråga här är, vill du lära dig, eller vill du ha svaret?

Berättigat

Permalänk
Medlem
Skrivet av anon81912:

Då hjälper jag dig med den första.

En exception kan kastas av metoder, närsomhelst, och "bubblar" därefter uppåt tills någon fångar den. Fångas den aldrig kraschar programmet.

try { MethodThatThrows(); } catch (Exception e) { Console.WriteLine(e.Message); }

Exempelvis skulle man kunna använda detta för att hantera att double.Parse(string number) inte lyckas parsa strängen och därmed kastar en exception.

Du kan garanterat lösa 2. Googla på "throw exception c#". Det är exakt precis frågan och första träffen kommer beskriva det i detalj.
Gillar du inte att söka på internet kan du börja här och leta dig vidare https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...
Delen om just exceptions förklarar det mesta för dig.

Klarar du inte av att söka på minsta lilla eller slå upp i din bok, där det står direkt så kommer du garanterat misslyckas med kursen och ingen här kommer vilja hjälpa dig mer.

Annars får du fråga din lärare eller dylikt.

Lyckas du lösa fråga 2 kan jag tänka mig att hjälpa dig på traven med fråga 3 och 4.

Det tragiska är att jag har fortfarande inte löst 1an som du ansåg du hjälpte mig med:D
Inte den blekast hur det ska skrivas och vad som skall vara där du skrev MethodThatThrows. Möjligtvis double.Parse(tal). Men det fungerar ändån inte. Aja tack iaf

Permalänk
Inaktiv
Skrivet av micke_mj:

Det tragiska är att jag har fortfarande inte löst 1an som du ansåg du hjälpte mig med:D
Inte den blekast hur det ska skrivas och vad som skall vara där du skrev MethodThatThrows. Möjligtvis double.Parse(tal). Men det fungerar ändån inte. Aja tack iaf

Blir det klarare såhär?

string isNotNumber = "inte ett nummer"; string isNumber = "1337"; try { double.Parse(isNotNumber); Console.WriteLine("Jag kommer inte att skrivas ut då double.parse kaster exception!"); } catch (Exception) { Console.WriteLine("Jag skrivs ut, exceptionen är hanterad!"); } try { double number = double.Parse(isNumber); Console.WriteLine("Jag kommer skrivas ut, parsningen gick bra!"); Console.WriteLine($"Numret är: {number}"); } catch (Exception) { Console.WriteLine("Jag skrivs inte ut, ingen exception"); }

Vad händer om du kör koden, stegar igenom detta?

Permalänk
Medlem
Skrivet av anon81912:

Blir det klarare såhär?

string isNotNumber = "inte ett nummer"; string isNumber = "1337"; try { double.Parse(isNotNumber); Console.WriteLine("Jag kommer inte att skrivas ut då double.parse kaster exception!"); } catch (Exception) { Console.WriteLine("Jag skrivs ut, exceptionen är hanterad!"); } try { double number = double.Parse(isNumber); Console.WriteLine("Jag kommer skrivas ut, parsningen gick bra!"); Console.WriteLine($"Numret är: {number}"); } catch (Exception) { Console.WriteLine("Jag skrivs inte ut, ingen exception"); }

Vad händer om du kör koden, stegar igenom detta?

Tack!
Hittade en annan lösning oxå.

double decimaltal = 0; bool loop = true; do { string tal; Console.WriteLine("Mata in ett tal med flera decimaler: "); tal = Console.ReadLine(); try { decimaltal = double.Parse(tal); loop = false; } catch (Exception e) { Console.WriteLine("Vafan, skriv ett decimaltal!"); Console.WriteLine(e.Message); } }while (loop) ; Console.WriteLine("{0} ---> {1}", decimaltal, Math.Round(decimaltal, 2)); Console.ReadLine(); }