14 svar
5677 visningar
alex behöver inte mer hjälp
alex 269 – Fd. Medlem
Postad: 3 sep 2019 19:01

Avrunda

Uppgift 2: Avrundaren
Denna uppgift handlar om flyttal och att avrunda sådana.

Uppgiften går ut på att du ska be användaren skriva in ett tal med decimaler.

Därefter ska ni be användaren skriva in hur många decimaler användaren vill ha.

Din kod ska avrunda talet enligt ovan, men också med ett på förbestämt antal decimaler (exempelvis tre).

 

jag vet inte vad ska jag göra sedan:

 

Console.WriteLine("Välj ett nummer med decimaler. ");
         string T = Console.ReadLine();

Dr. G 9500
Postad: 3 sep 2019 19:04

Du behöver möjligen omvandla strängen till ett flyttal (kan inte c#).

Det bör finnas en funktion av typ

round(x)

som returnerar närmaste heltal.

Vad gör då

round(10*x)/10

?

alex 269 – Fd. Medlem
Postad: 3 sep 2019 19:23

hur blir koden då??

Dr. G 9500
Postad: 3 sep 2019 20:08

C# kan jag som sagt inte. 

Du behöver hitta en funktion som omvandlar strängen T till ett flyttal.

Du behöver hitta en funktion som avrundar ett flyttal till närmaste heltal. 

Vad säger Google?

Fundera sedan på vad 

round(10*x)/10 

om x = 4.123

och hur detta kan hjälpa dig för att lösa uppgiften.

alex 269 – Fd. Medlem
Postad: 3 sep 2019 21:01

Jag hittade ett sätt med Math.Round men det går inte mer än 15 antal decimaler, varför??

Dr. G 9500
Postad: 3 sep 2019 22:18

Det beror på hur många bitar som talet är. Omvandla strängen till decimal istället för double så bör det gå (ifall du inte nöjer dig med 15 decimaler).

Affe Jkpg 6630
Postad: 3 sep 2019 23:34

double dvalue = Convert.ToDouble(Console.ReadLine());

int ivalue = Convert.ToInt32(dvalue) - 0.5; // Förutsatt att det inmatade talet är positivt

osv. 

Affe Jkpg 6630
Postad: 4 sep 2019 09:00
Affe Jkpg skrev:

double dvalue = Convert.ToDouble(Console.ReadLine());

int ivalue = Convert.ToInt32(dvalue) - 0.5; // Förutsatt att det inmatade talet är positivt

osv. 

Jag halkade visst på tangentbordet...

int ivalue = Convert.ToInt32(dvalue - 0.5); // Förutsatt att det inmatade talet är positivt

Laguna Online 30707
Postad: 4 sep 2019 09:06
Affe Jkpg skrev:
Affe Jkpg skrev:

double dvalue = Convert.ToDouble(Console.ReadLine());

int ivalue = Convert.ToInt32(dvalue) - 0.5; // Förutsatt att det inmatade talet är positivt

osv. 

Jag halkade visst på tangentbordet...

int ivalue = Convert.ToInt32(dvalue - 0.5); // Förutsatt att det inmatade talet är positivt

Om antalet önskade decimaler är större än noll då?

Yngve Online 40559 – Livehjälpare
Postad: 4 sep 2019 10:10 Redigerad: 4 sep 2019 10:13
alex skrev:

Jag hittade ett sätt med Math.Round men det går inte mer än 15 antal decimaler, varför??

Det beror på begränsningar i datatypen double.

Om du vill ha fler decimaler bör du istället använda datatypen decimal. Det ger dig 28-29 signifikanta siffror. Du kan fortfarande använda samma avrundningfunktion.

Här kan du läsa mer om funktionen Math.Round och de olika datatyperna.

Affe Jkpg 6630
Postad: 4 sep 2019 10:41
Laguna skrev:
Affe Jkpg skrev:
Affe Jkpg skrev:

double dvalue = Convert.ToDouble(Console.ReadLine());

int ivalue = Convert.ToInt32(dvalue) - 0.5; // Förutsatt att det inmatade talet är positivt

osv. 

Jag halkade visst på tangentbordet...

int ivalue = Convert.ToInt32(dvalue - 0.5); // Förutsatt att det inmatade talet är positivt

Om antalet önskade decimaler är större än noll då?

Hur tänker du nu? Exempel:

3.6999 - 0.5 = 3.1999

Eller du tänker att jag inte presenterat ett facit, utan lämnat åt uppgiftskrivaren att fortsätta ....

Yngve Online 40559 – Livehjälpare
Postad: 4 sep 2019 11:08 Redigerad: 4 sep 2019 12:25
Affe Jkpg skrev:
Laguna skrev:
Om antalet önskade decimaler är större än noll då?

Hur tänker du nu? Exempel:

3.6999 - 0.5 = 3.1999

Eller du tänker att jag inte presenterat ett facit, utan lämnat åt uppgiftskrivaren att fortsätta ....

Kanske att funktionen ToInt32 returnerar ett heltal och att avrundningen blir fel?

Convert.ToInt32(3,1999) returnerar heltalet 3, vilket kan vara oönskat om indata är 3,6999.

Affe Jkpg 6630
Postad: 4 sep 2019 12:43 Redigerad: 4 sep 2019 12:46
Yngve skrev:
Affe Jkpg skrev:
Laguna skrev:
Om antalet önskade decimaler är större än noll då?

Hur tänker du nu? Exempel:

3.6999 - 0.5 = 3.1999

Eller du tänker att jag inte presenterat ett facit, utan lämnat åt uppgiftskrivaren att fortsätta ....

Kanske att funktionen ToInt32 returnerar ett heltal och att avrundningen blir fel?

Convert.ToInt32(3,1999) returnerar heltalet 3, vilket kan vara oönskat om indata är 3,6999.

Det borde vara bekant att heltalsdelen av t.ex. 3.6999 är 3
Då är det sedan inte långt borta att hitta decimaldelen av t.ex. 3.6999

Sedan finns det mängder av sätt att lösa uppgiften på.

Yngve Online 40559 – Livehjälpare
Postad: 4 sep 2019 14:12 Redigerad: 4 sep 2019 14:18
Affe Jkpg skrev:
Det borde vara bekant att heltalsdelen av t.ex. 3.6999 är 3

Då är det sedan inte långt borta att hitta decimaldelen av t.ex. 3.6999

Sedan finns det mängder av sätt att lösa uppgiften på.

Jaha du tänkte så. Istället för att använda Math.Floor alltså. Det fattade inte jag. Inte heller Laguna verkar det som. Vi kan hoppas att TS gjorde det.

Eftersom du inte skrev att du föreslog en alternativ metod (att dela upp i heltalsdel och decimaldel), så trodde åtminstone jag att du fortsatte på den väg som Dr. G pekat ut.

alex 269 – Fd. Medlem
Postad: 4 sep 2019 17:24
Dr. G skrev:

Det beror på hur många bitar som talet är. Omvandla strängen till decimal istället för double så bör det gå (ifall du inte nöjer dig med 15 decimaler).

Det stämmer

Tack så mycket

Svara
Close