6 svar
116 visningar
Karro78 behöver inte mer hjälp
Karro78 15
Postad: 3 jan 2023 13:20

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

Laguna Online 30711
Postad: 3 jan 2023 13:35

Du får ordna så att ett av talen i divisionen har typen float.

Karro78 15
Postad: 3 jan 2023 14:09

Hej.

Okej. dessutom ska det finnas två lösningar på detta problem men fattar inte hur det ska kunna gå till.

Laguna Online 30711
Postad: 3 jan 2023 15:57

Hur ser din lösning ut?

Fermatrix 7841 – Fd. Medlem
Postad: 3 jan 2023 17:11

Finns långt mer än två lösningar! 

Karro78 15
Postad: 4 jan 2023 10:34

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

SeriousCephalopod 2696
Postad: 4 jan 2023 11:01 Redigerad: 4 jan 2023 11:02

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.

Svara
Close