Avatar billede dk_akj Nybegynder
14. november 2011 - 21:56 Der er 6 kommentarer og
1 løsning

Division

Hejsa,

int x = 10;
int y = 3;
double z = x/y;

z er nu 0 ??
int x = 10;
int y = 3;
double z = (double)x/(double)y;

z er nu 3.333

Skal variabler altid castes først ??

//akj
Avatar billede Syska Mester
14. november 2011 - 22:04 #1
Ingen ide om hvad det hedder ... helt glemt det. Men den tager den mest betydende.

double / int giver double
int / int giver int

Hvordan skulle den vide om du ville have float, decimal eller double ved int / int.

mvh
Avatar billede Syska Mester
14. november 2011 - 22:06 #2
da du kan lave implicit casting fra int til double vil følgende virker som du også selv skriver:
int x = 10;
int y = 3;
double z = x/y;

Problemet er at int/int er int ... og derefter laver den assigment til din double ... dvs den sætter 0 til din x.

Derfor skal enten x eller y være en double, så vil z få den rigtige værdi.

mvh
Avatar billede dk_akj Nybegynder
14. november 2011 - 22:07 #3
oki, z er jo double, så må den da kunne regne det ud, den må da gerne tænke bare lidt selv ;-)

Takker, læg gerne et svar

//aakj
Avatar billede Syska Mester
14. november 2011 - 22:26 #4
ja, z er double. men int / int er int ... og derefter laver den jo assignment til z som sker implicit. Dvs det sker automatisk.

Hvis det er fra double til int, skal der explicit casting til.

mvh
Avatar billede Slettet bruger
14. november 2011 - 23:38 #5
Hvis x = 10 og y = 3, og de begge er integers, så får du en integer tilbage (som det allerede er blevet nævnt), dvs. 3. Kan ikke lige forstå du får 0, medmindre du har byttet om på x og y.
Hvis du derimod skriver:
  double z = 1.0 * x / y;
får du resultatet 3.3333... (og det hjælper selvfølgelig også at caste enten x eller y til en double i din division, men du behøver ikke at caste begge variable til en double).
Avatar billede arne_v Ekspert
15. november 2011 - 00:51 #6
der er helt praecise regler for hvordan ting udregnes

C# operator precedens siger at

z = x/y;

skal udregnes som

1) beregn x/y
2) tildel resultatet til z

C# operator int/int er defineret til at lave heltals division d.v.s. at resultatet "nedrundes" til et helt tal

nogle sprog har baade en heltals division operator og en operator som laver floating point division

men ikke C#
Avatar billede dk_akj Nybegynder
15. november 2011 - 07:29 #7
tak til jer alle.
tolamaps, korrekt, jeg havde ikke prøvet med 10/3, da jeg testede var det på produktionstal, mener det var sådan noget som 72/100 og som Arne så skriver så vil jeg jo få 0.

Dejligt lige at få styr på hvordan det hænger sammen :-)

//akj
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester