14 svar
101 visningar
alex är nöjd med hjälpen!
alex 182
Postad: 3 sep 2019

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 4525
Postad: 3 sep 2019

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 182
Postad: 3 sep 2019

hur blir koden då??

Dr. G 4525
Postad: 3 sep 2019

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 182
Postad: 3 sep 2019

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

Dr. G 4525
Postad: 3 sep 2019

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 4801
Postad: 3 sep 2019

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

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

osv. 

Affe Jkpg 4801
Postad: 4 sep 2019
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 5673
Postad: 4 sep 2019
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 12049 – Mattecentrum-volontär
Postad: 4 sep 2019 Redigerad: 4 sep 2019
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 4801
Postad: 4 sep 2019
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 12049 – Mattecentrum-volontär
Postad: 4 sep 2019 Redigerad: 4 sep 2019
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 4801
Postad: 4 sep 2019 Redigerad: 4 sep 2019
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 12049 – Mattecentrum-volontär
Postad: 4 sep 2019 Redigerad: 4 sep 2019
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 182
Postad: 4 sep 2019
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 Avbryt
Close