Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 18:32 Der er 14 kommentarer og
2 løsninger

Double med MAX 9 decimaler

Hej

Jeg har lidt problemer med billede scalering i asp.net C# ... jeg tror jeg har fundet frem til fejlen da den kun sker ved nogle billeder....

Min ide er at når jeg ved nogle billeder vil scalere dem.. bliver den double alt for lang.. det sker nemlig oftest ved de billeder hvor min double kommer til at være 1/3 altså 324.333333333333333333333333333333333333333333333333333333333333333333333 kan det passe det resultetere i en memory error exception... jeg har regnet dem alle sammen ud .. og det sker kun hvis der som før eksemepelt vis aldrig er en ende på doublen...

hvordan gør jeg så min double kun bliver med et vist antal decimaler..... eksempelvist 9 eller mindre...

/MVH
Jacob
Avatar billede arne_v Ekspert
03. februar 2004 - 19:20 #1
Du kan bestemme hvor mange decimaler din double skal vises med ved at
formatere eksplicit med String.Format !

String.Format("{0:#.000000000}", x)

eller

String.Format("{0:#.#########}", x)

men jeg er ikke overbevist om at det er dit problem !
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 19:26 #2
nej .. det skal være så resultatet kun kan blive udregnet med 9 decimaler.. men jeg prøver lige.. tak
Avatar billede arne_v Ekspert
03. februar 2004 - 19:32 #3
double er binært baseret d.v.s. at det er a1/2+a2/4+a3/8+a4/16+...
ikke decimalt baseret a1/10+a2/100+a3/1000+... d.v.s. at en double
ikke har "antal decimaler" i klassisk betydning.

Muligvis kan du bruge typen decimal i.s.f. double.

Muligvis kan du runde lidt af med:

x = ((long)(x * 1000000000)) / 1000000000;

Men det afhænger meget af hvad du vil.
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:08 #4
imgHeight = converted.Height;
imgWidth = converted.Width;
if(imgHeight > maxWidth){
    newWidth = maxWidth;
    scaleFactor = (float)imgWidth / maxWidth;
    newHeight = imgHeight / scaleFactor;
    }else{
        maxWidth=converted.Width;
            newHeight=(float)converted.Height;
            }


Det jeg vil er at tage mit converted bitmap.. hente højde og bredde på dem.... hvis bredden er breddere end 500(maxWidth)skal den sætte newWidth(den nye bredde på bitmap) til 500... regne ud hvormange procent mindre billedet er .. og derefter scalere højden probertionelt... tager vi så eksempelvist et billede på 3072x2048 og sætter bredden til 500 bliver scalefactor =  6.1444 .. og den nye højde 333,1/3.. og det er her den laver fejl tror jeg...

Har siddet og tænkt på om man kunne regne det ud på en anden måde.. men mine matematiske evner er ikke noget at prale af...

JAcob
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:11 #5
jeg har prøvet at tage et billede der har den størrelse og scale det ned til 3000x2000 så virker det fint... jeg har forsøgt med 40 mb jpg billeder og det virker fint... så jeg tror kun det kan være der...
Avatar billede arne_v Ekspert
03. februar 2004 - 20:21 #6
Jeg er ikk ekyndig ud i grafik men jeg troed altså at billed dimensioner
per definition skulle være heltal ??
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:27 #7
ja det laver jeg dem også om til.. men jeg vil gerne have den regner det så præsist ud til sidst
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:27 #8
sidst = som muligt
Avatar billede arne_v Ekspert
03. februar 2004 - 20:28 #9
333.3 og 333.333333333 bliver da begge til 333
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:29 #10
spørgsmålet er sådan set bare hvordan jeg får x til ikke at blive for lang ved ligningen | x = 10 / 3 | hvis jeg blot skriver det ud som en double laver den det godt nok om.. så det bare bliver 3.333333333 .. jeg er lidt lost
Avatar billede ddobbeltv Nybegynder
03. februar 2004 - 20:30 #11
ja.. men det er før jeg saver mit bitmap den laver fejl...
Avatar billede arne_v Ekspert
03. februar 2004 - 20:34 #12
x = 10 / 3; vil altid fylde præcist 64 binære cifre. Double gemmes ikke som
decimaler. Så det er ihvertfald ikke problemet.
Avatar billede ddobbeltv Nybegynder
04. februar 2004 - 18:08 #13
Arna >> kom lige med et svar så deler vi point.. jeg fandt en simpel løsning.. jeg gangede det hele med 10000 og brugte int's

tak for din tid
Avatar billede ddobbeltv Nybegynder
04. februar 2004 - 18:08 #14
Arne sorry :)
Avatar billede arne_v Ekspert
04. februar 2004 - 18:14 #15
Så ligger jeg et svar
Avatar billede arne_v Ekspert
16. februar 2004 - 21:59 #16
Tid at lukke spørgsmålet ?
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