Felaktiga variabeltyper. Övning 3,7 i arbetsboken
Hej.
Vill försöka förstå uppgiften 3.7 som är följande:
int a = 1;
int b = 2;
float c = a / b;
Console.WriteLine (c);
Det ska inte bli noll 0 utan 0,5 men fattar inte hur jag ska skriva för att få en halv istället för noll
Du får ordna så att ett av talen i divisionen har typen float.
Hej.
Okej. dessutom ska det finnas två lösningar på detta problem men fattar inte hur det ska kunna gå till.
Hur ser din lösning ut?
Finns långt mer än två lösningar!
Jag har ingen bra lösning på problemet. Skulle vilja kunna träffa någon expert som kunde hjälpa mig att fatta. Är mycket intresserad hur denna programmering fungerar men har inte någon att fråga
Problemet: Om båda variablerna a och b är heltal ('ints') så kommer a / b och att utföras som heltalsdivision och det spelar ingen roll att det sedan sparas i en float.
2 får plats 0 hela gånger i 1 så svaret vid heltalsdivision är 0.
1/2 = 0 (med rest 1)
Princip hos lösning: För att a / b ska utföras med flyttalsdivision måste minst en av variablerna a och b vara floats (eller annan typ som kan representera decimaltal).
Lösning 1: Definiera a och b som flyttal från början.
float a = 1
float b = 2
Då kommer flyttalsdivision att köras automatiskt.
Lösning 2: Typkonvertera ('casta om') a och b i själva operationen. Detta kan vara mer lämpligt om det är viktigt att a och b lagras som heltal.
float c = (float) a / (float) b
Även om a och b då sparas som heltal i minnet så konverteras de temporärt till floats innan beräkningen görs.
Lösning 3: Det räcker egentligen att se till att minst en av a och b är floats snarare än att båda är floats men då kommer läsaren kanske bli förvirrad över varför det ena talet är en float och inte det andra.