Vinnaren i pepparkakshustävlingen!
2022-09-19, 15:38
  #1
Medlem
Håller på med mitt första program. Det är ett system som räknar ut växel och fördelar den i olika valörer. Jag har löst att systemet fördelar växeln från tusenlappar ner till enkronor, men den ska även kunna räkna ut anta femtioöringar. Nu till problemet, jag ska ska avrunda örena på så sätt att <25 öre = 0, mellan 25 och 75 = en femtioöring och >75 = en krona.
Några tips på hur jag kommer vidare?

Ett tillägg. Mellanskillnaden kunden får tillbaka har jag konverterat från double till int, så det sker väl en avrundning redan där?
__________________
Senast redigerad av fabfag 2022-09-19 kl. 15:50.
Citera
2022-09-19, 16:43
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av fabfag
Håller på med mitt första program. Det är ett system som räknar ut växel och fördelar den i olika valörer. Jag har löst att systemet fördelar växeln från tusenlappar ner till enkronor, men den ska även kunna räkna ut anta femtioöringar. Nu till problemet, jag ska ska avrunda örena på så sätt att <25 öre = 0, mellan 25 och 75 = en femtioöring och >75 = en krona.
Några tips på hur jag kommer vidare?

Ett tillägg. Mellanskillnaden kunden får tillbaka har jag konverterat från double till int, så det sker väl en avrundning redan där?
Hur ser ditt eget försök att lösa problemet ut och var är det du fastnar?

Är väl bara att dra upp lite iffar så ordnar det sig?
Citera
2022-09-19, 16:53
  #3
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av fabfag
Ett tillägg. Mellanskillnaden kunden får tillbaka har jag konverterat från double till int, så det sker väl en avrundning redan där?
Kör och begrunda:
Kod:
using System;
class HelloWorld {
  static void Main() {
    int a;
    double b=6.97;
    a=(int) b;
    Console.WriteLine(a);
  }
}
Citera
2022-09-19, 17:03
  #4
Medlem
Citat:
Ursprungligen postat av Enterprise
Kör och begrunda:
Kod:
using System;
class HelloWorld {
  static void Main() {
    int a;
    double b=6.97;
    a=(int) b;
    Console.WriteLine(a);
  }
}

Det som händer här är att decimalerna .97 försvinner och kvar blir bara heltalet 6, d.v.s a får vädet 6.

Edit. Läste inte igenom frågan.

..du kan ta ut örena med:
Ören = b - ( int) b

Sen sålla vidare..
__________________
Senast redigerad av PannkakaOneMillion 2022-09-19 kl. 17:08.
Citera
2022-09-19, 17:04
  #5
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av PannkakaOneMillion
Det som händer här är att decimalerna .97 försvinner och kvar blir bara heltalet 6, d.v.s a får vädet 6.

Om meningen är att avrunda till närmaste heltal måste du använda round() från math. Tror man måste lägga till "using Math" eller liknande
Det var just min poäng, att inte anta att det blir en matematiskt korrekt avrundning genom att omvandla ett flyttal till ett heltal.
Citera
2022-09-19, 17:04
  #6
Medlem
Paponims avatar
Om du redan omvandlat till heltal så lär du redan ha gått miste om eventuella 50-öringar.

Om du har ett flyttal så gör du så här på algoritm-nivå:
1. Multiplicera med 2
2. Addera 0,5
3. Gör om till heltal genom att slänga decimalerna (behåll heltalsdelen)
4. Dividera med 2

Obs dock att även 0,75 kommer att avrundas uppåt till 1.
Citera
2022-09-19, 17:18
  #7
Medlem
Du kan helt undvika det speciella problemet med örena, om du istället börjar med att multiplicera med 100, addera 25, trunkera decimaldelen och räkna allt i ören. 500-lappar blir 50000 ören, 100-lappar blir 10000 ören och så vidare.
Citera
2022-09-19, 17:20
  #8
Medlem
Citat:
Ursprungligen postat av Paponim
Om du har ett flyttal så gör du så här på algoritm-nivå:
1. Multiplicera med 2
2. Addera 0,5
3. Gör om till heltal genom att slänga decimalerna (behåll heltalsdelen)
4. Dividera med 2

Smart lösning 👍
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in