Avatar billede lasserasch Juniormester
15. august 2008 - 12:16 Der er 16 kommentarer og
2 løsninger

Regne en procentsats ud driller lidt.

Hejsa.

Simpelt spørgsmål.

Jeg har 2 double værdier.

Værdi1 = 3.
Værdi2 = 4.

Hvis jeg på en lomme regner skriver: "3/4 * 100" så får man: 75%.

Men hvis jeg i min kode skriver: "Værdi1 / Værdi2 * 100" så får jeg resultatet "0".

Er der en som kan fortælle den rigtige måde at lave sådan et regne stykke på?

/Lasse
Avatar billede Slettet bruger
15. august 2008 - 12:25 #1
Du skal explicit typecaste dine værdier.

Grunden til at den giver 0 er fordi den laver en heltals division. og da resultatet er 0,75 bliver det derfor lig 0.

prøv med Værdi1 / (double)Værdi2 * 100

Mvh
Lars
Avatar billede sherlock Nybegynder
15. august 2008 - 12:38 #2
Udskriver 75:


using System;

namespace Procent

{
  class Class1
  {
    static void Main()
    {
        Double Værdi1 = 3.0;
        Double Værdi2 = 4.0;

        Console.WriteLine((Værdi1 / Værdi2) * 100);
    }
  }
}
Avatar billede softspot Forsker
15. august 2008 - 12:38 #3
eller typecaste konstanten 100:

Værdi1 / Værdi2 * 100.0
Avatar billede arne_v Ekspert
15. august 2008 - 13:28 #4
Hvis både værdi1 og værdi2 er int, så går den sidste nok ikke (3/4 er 0 og 0*100.0 er 0.0).
Avatar billede Slettet bruger
15. august 2008 - 13:36 #5
Og hvis vi skal forsætte med at finde alternative metoder så kan vi da også ændre lidt på regnestykket. Faktorernes orden er jo som fortalt i 3 klasse uvedkommende.

double procent = (100 * Værdi1) / Værdi2
Avatar billede sherlock Nybegynder
15. august 2008 - 13:51 #6
>>  Faktorernes orden er jo som fortalt i 3 klasse uvedkommende.
>>

Og som du selv demonstrerer, med paranteserne, så er de ikke ligegyldige i en computer, fordi man mister præcision, ved at dividere først;
Avatar billede softspot Forsker
15. august 2008 - 13:53 #7
Jo, men lasse starter jo med at sige at han har "2 double værdier.". Det tolker jeg jo sådan, at de er erklæret med typen double, hvilket vel er nok til at compileren kan finde ud af at det IKKE er heltal i det regnestykke. Så er der jo kun én værdi tilbage som ikke er typebestemt (dvs. konstanten for dem som ikke er med endnu)... ikk'?
Avatar billede arne_v Ekspert
15. august 2008 - 13:58 #8
double procent = (100 * Værdi1) / Værdi2

virker stadig ikke godt hvis værdi1 og værdi2 er int, da procent vil blive afrundet
til heltal, det virker tilfældigvis fint for 3 og 4

double procent = (100.0 * Værdi1) / Værdi2

derimod
Avatar billede arne_v Ekspert
15. august 2008 - 13:59 #9
softspot>

ja - det skrives der, men hvis det var tilfældet, så ville problemet ikke være der
Avatar billede softspot Forsker
15. august 2008 - 13:59 #10
Så er vi vist også tilbage ved mit forslag ;-)
Avatar billede softspot Forsker
15. august 2008 - 14:00 #11
Jo, det vil det vel... compileren opfatter vel selv 100 som en int og dermed bliver regnestykket tolket som et int resultat... gør det ikke?
Avatar billede softspot Forsker
15. august 2008 - 14:01 #12
...så iflg. min teori er det altså 100 der skal typecastes for at det bliver double og ikke de to variable.
Avatar billede softspot Forsker
15. august 2008 - 14:08 #13
hm... nå det var altså ikke tilfældet... så er det nok som arne siger :-)
Avatar billede sherlock Nybegynder
15. august 2008 - 14:09 #14
Mit eksempel, højere oppe, virker uden at typecaste 100.

Det ville være godt at se, i hvilken kontekst lasserasch har problemet.
Avatar billede lasserasch Juniormester
15. august 2008 - 16:52 #15
Puha, det var da godt nok mange svar på et spørgmål jeg troede ville give et enkelt hit eller to :-) Det er jo kun positivt.

Nå, men for at opklare situationen.

Værdi1 og værdi2 er defineret som double værdier. 100 troede jeg ikke var nødvendig at definere. Efter at ændre 100 til 100.0 så virker regnestykket. Det vil altid være double værdier i det pågældende tilfælde...

Så foreslaget fra softspot har jeg afprøvet, og det virker rigtig godt.
Tak for hjælpen alle sammen.

Smid et svar for points!

Mvh.
Lasse
Avatar billede softspot Forsker
16. august 2008 - 21:43 #16
Velbekomme :)
Avatar billede lasserasch Juniormester
28. august 2008 - 19:20 #17
Beklager den sene tilbagemelding og lukning af spørgsmålet. :-)
Avatar billede softspot Forsker
28. august 2008 - 21:10 #18
Tak for point :)
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