Avatar billede ravnborg Nybegynder
03. november 2006 - 21:46 Der er 28 kommentarer og
2 løsninger

Problemer med plus af tilfældige tal.

Jeg er stødt ind i et problem. Når jeg lader en asp side generer 2 tilfældige tal. Dividerer dem med 1000 for at lave dem om til kommatal, og til sidst plus dem. Giver det for det meste, et resultat med rigtig mange decimaler.
f.eks.:
40,89 + 71,913  =  112,802999389648 

hvad har jeg lavet galt i scriptet? 

<table width=100%>
<%
teller = 1
for antal = 1 to 25
    Randomize
        randnum1 = int(rnd * 10000) + 1000
        FTal=randnum1/100
       
        randnum2 = int(rnd * 100000) + 10000
        ATal=randnum2/1000
   
    resultat = FTal + Atal
%>

<tr>
    <td width=200><font size="+1"><%= FTal %> + <%= Atal %></font></td>
    <td>
    <font size="+1">&nbsp;=&nbsp;
    <%= resultat %>
    </font>
    </td>
</tr>
<% next %>

</table>
Avatar billede madeindk Nybegynder
03. november 2006 - 22:03 #1
Vil du ha den skal forkorte det ned så der fx. kun er 2 decimaler?
Avatar billede ravnborg Nybegynder
03. november 2006 - 22:06 #2
ved første tal skal der være to decimaler, ved andet tal skal der være tre.
Avatar billede cpufan Juniormester
03. november 2006 - 22:13 #3
<%
teller = 1
for antal = 1 to 25
    Randomize
        randnum1 = int(rnd * 10000) + 1000
        FTal=formatnumber((randnum1/100),2)
     
        randnum2 = int(rnd * 100000) + 10000
        ATal=formatnumber((randnum2/1000),3)
 
    resultat = fromatnumber(FTal + Atal,3)
%>
Avatar billede cpufan Juniormester
03. november 2006 - 22:14 #4
hov stavebøf

resultat = formatnumber(FTal + Atal,3)
Avatar billede ravnborg Nybegynder
03. november 2006 - 22:22 #5
Den er ikke helt vild med:
resultat = formatnumber(FTal + ATal,3)

Den giver fejlen:
Typer stemmer ikke overens: 'formatnumber'
Avatar billede cpufan Juniormester
03. november 2006 - 22:33 #6
hvad med


resultat = formatnumber((FTal + ATal),3)
Avatar billede cpufan Juniormester
03. november 2006 - 22:35 #7
måske skal den lige sættes til double længere oppe:

    <%
teller = 1
for antal = 1 to 25
    Randomize
        randnum1 = int(rnd * 10000) + 1000
        FTal=formatnumber(Cdbl(randnum1/100),2)
   
        randnum2 = int(rnd * 100000) + 10000
        ATal=formatnumber(Cdbl(randnum2/1000),3)

    resultat = formatnumber(Cdbl(FTal + Atal),3)
%>
Avatar billede ravnborg Nybegynder
04. november 2006 - 09:22 #8
Det hjalp heller ikke.

Typer stemmer ikke overens: 'Cdbl'
Avatar billede thesurfer Nybegynder
06. november 2006 - 00:13 #9
Så vidt jeg kan huske, smider man "randomize" udenfor loopen..

dvs:

randomize
for
...
next

Men det er ikke det der er problemet her..
Avatar billede thesurfer Nybegynder
06. november 2006 - 00:20 #10
PS:

    resultat = formatnumber(Cdbl(FTal) + CDbl(Atal),3)
Avatar billede ravnborg Nybegynder
11. november 2006 - 22:38 #11
Hvad er det der går galt??

I randomize bliver de afrundet. Når man skriver dem er de ok, men når man så lægger dem sammen går de amok!!  Jeg fatter ikke en meter af det her......
Avatar billede thesurfer Nybegynder
12. november 2006 - 01:00 #12
ravnborg> Hvordan ser din kode ud nu?
Avatar billede ravnborg Nybegynder
12. november 2006 - 09:04 #13
Når jeg laver en formatnumber virker det, men så er tallet med tællepunktum og 3 decimaler selvom de to sidste er nuller.
Det bliver bøvlet at arbejde videre med de tal.

Men for at lærer mere om asp. Hvad er det der sker?
Når jeg laver mit Randomize så afrunder ASP. Når jeg så vil lave til kommatal, ved at dividerer med feks 100 og derefter lægge dem sammen, så er tallet ikke afrundet mere!!  hvorfor??
Avatar billede thesurfer Nybegynder
13. november 2006 - 01:14 #14
ravnborg> Som jeg skrev i 12/11-2006 01:00:44:

Vis os din kode, så vi kan se hvordan du gør.


Hvis det er dig der gør noget forkert, kan vi jo ikke rigtigt forklare fejlen..
Avatar billede ravnborg Nybegynder
14. november 2006 - 20:50 #15
Her er koden:

<table width=100%>
<%
teller = 1
Randomize
for antal = 1 to 25
   
        randnum1 = int(rnd * 10000) + 1000
        FTal=randnum1/100
       
        randnum2 = int(rnd * 100000) + 10000
        ATal=randnum2/1000
   
    'resultat = FTal + Atal
    resultat = formatnumber(Cdbl(FTal + Atal),3)

%>

<tr>
    <td width=200><font size="+1"><%= FTal %> + <%= Atal %></font></td>
    <td>
    <font size="+1">&nbsp;=&nbsp;
    <%= resultat %>
    </font>
    </td>
</tr>
<% next %>

</table>
Avatar billede thesurfer Nybegynder
14. november 2006 - 20:52 #16
Som jeg skrev i 06/11-2006 00:20:15:

    resultat = formatnumber(Cdbl(FTal) + CDbl(Atal),3)
Avatar billede ravnborg Nybegynder
14. november 2006 - 21:04 #17
Det giver samme resultat. Tal med kun en decimal bliver tvunget til 3 decimaler. Samt at der bliver tilføjet tællepunktum.

Hvorfor går det galt med "resultat = FTal + Atal" ??
40,89 + 71,913  =  112,802999389648 
Hvor kommer alle de decimaler fra????
Avatar billede thesurfer Nybegynder
14. november 2006 - 21:23 #18
Underligt.. jeg får: 40.89 + 71.913 = 112,803

Kode:

<%
teller = 1
Randomize
for antal = 1 to 25

    randnum1 = int(rnd * 10000) + 1000
    FTal=randnum1/100

    randnum2 = int(rnd * 100000) + 10000
    ATal=randnum2/1000

    'resultat = FTal + Atal
    resultat = formatnumber(Cdbl(FTal) + CDbl(Atal),1)

    response.write FTal & " + " & Atal & "<br>"

next

response.write "<br>40.89 + 71.913 = " & 40.89 + 71.913
%>
Avatar billede thesurfer Nybegynder
14. november 2006 - 21:26 #19
Rettelse:

<%
teller = 1
Randomize
for antal = 1 to 25

    randnum1 = int(rnd * 10000) + 1000
    FTal=randnum1/100

    randnum2 = int(rnd * 100000) + 10000
    ATal=randnum2/1000

    'resultat = FTal + Atal
    resultat = formatnumber(Cdbl(FTal) + CDbl(Atal),3)

    response.write FTal & " + " & Atal & "<br>"

next

response.write "<br>40.89 + 71.913 = " & 40.89 + 71.913
%>

Det er lige meget om jeg bruger Cdbl(FTal) + CDbl(Atal) eller Cdbl(FTal + Atal)
Avatar billede thesurfer Nybegynder
14. november 2006 - 21:29 #20
Denne her virker fint:

response.write "<br>40.89 + 71.913 = " & formatnumber( 40.89 + 71.913 , 3)

Man kan selv vælge antallet af decimaler..

Er antellet for stort, vises nuller..

Eksempel:

response.write "<br>40.89 + 71.913 = " & formatnumber( 40.89 + 71.913 , 10)


Udskrift: 40.89 + 71.913 = 112,8030000000
Avatar billede ravnborg Nybegynder
14. november 2006 - 21:30 #21
Prøv med denne kode:
Jeg stopper for i aften, er på igen i morgen.


<table width=100%>
<%
teller = 1
Randomize
for antal = 1 to 25
   
        randnum1 = int(rnd * 10000) + 1000
        FTal=randnum1/100
       
        randnum2 = int(rnd * 100000) + 10000
        ATal=randnum2/1000
   
    resultat = FTal + Atal
    'resultat = formatnumber(Cdbl(FTal) + CDbl(Atal),3)

%>

<tr>
    <td width=200><font size="+1"><%= FTal %> + <%= Atal %></font></td>
    <td>
    <font size="+1">&nbsp;=&nbsp;
    <%= resultat %>
    </font>
    </td>
</tr>
<% next %>

</table>
Avatar billede thesurfer Nybegynder
18. november 2006 - 14:42 #22
Jeg får samme fejl.. Jeg ved ikke helt hvorfor..

Jeg må prøve mig frem med nogle tests.. Forhåbentligt her i weekenden..

Hvis jeg ikke svarer inden mandag, skriv lidt et indlæg så jeg får en mail om det..
Avatar billede cpufan Juniormester
18. november 2006 - 14:53 #23
decimalerne kommer da det er den samme variabel der hentes fra,
den har ikke slettet decimalerne blot afrundet for læsbarhed.

ellers skal du over i en mellemvariabel

nyftal = formatnumber(ftal,3)

nyftal vil så kun indeholde den afkortede information.
Avatar billede thesurfer Nybegynder
27. november 2006 - 18:07 #24
Kommer man videre?
Avatar billede ravnborg Nybegynder
29. november 2006 - 20:00 #25
Jeg kommer først til at kikke på det i weekenden.
Så skulle det gerne virke ;-)
Avatar billede ravnborg Nybegynder
20. december 2006 - 18:59 #26
Er der nogen mulighed for at FORMATNUMBER automatisk tager det antal decimaler som tallet indeholder.
Så hvis tallet har 3 decimaler bliver det retuneret fra FORMATNUMBER med 3, og hvis det har 2 bliver det retuneret med 2?
Avatar billede thesurfer Nybegynder
24. december 2006 - 19:09 #27
Hey.. det er vist noget tid siden, at der sidst var gang i tråden her..

Men her er en ide:

Lav en streng, der indeholder tallet. Tæl antallet af tegn, efter komma. Smid antallet af tegn over i en variabel. Brug variablen i stedet for "3", eller hvad du nu har af værdi for antallet af kommatal.

Eksempel:
function FindAntalletAfKommatal(inputstreng)

dim intTal, intAntalKommatal, strTal
intTal = CDbl(inputstreng)
strTal = CStr(intTal)
strTal = mid(strTal, InStr(strTal, ",") + 1)
intAntalKommatal = len(strTal)
FindAntalletAfKommatal = intAntalKommatal
end function

' Test udskrivning:
response.write "Antallet af kommatal for 123.4567 er: " & FindAntalletAfKommatal(123.4567)

Så kan du bruge det sådan her:
intKommatalFTal = FindAntalletAfKommatal(FTal)

intKommatalATal = FindAntalletAfKommatal(ATal)

intAntalDecimaler = intKommatalFTal
if intKommatalATal > intKommatalFTal then intAntalDecimaler = intKommatalATal

og til sidst:

formatnumber(...., intAntalDecimaler)
Avatar billede ravnborg Nybegynder
26. december 2006 - 22:35 #28
thesurfer opret lige et svar.
Avatar billede thesurfer Nybegynder
26. december 2006 - 22:52 #29
OK :-)
Avatar billede thesurfer Nybegynder
27. december 2006 - 13:38 #30
Jeg kom i tanke om, at den vil returnere længden af hele værdien, hvis værdien ikke indeholder kommatal..

Eksempel: FindAntalletAfKommatal(123) vil returnere 3, da "123" består af 3 tegn
Men den skulle jo returnerer 0, da der ikke er kommatal.


Jeg har derfor rettet funktion, så den ser sådan ud:


function FindAntalletAfKommatal(inputstreng)
dim intTal, intAntalKommatal, strTal
intTal = CDbl(inputstreng)
strTal = CStr(intTal)
intAntalKommatal = 0
msgbox InStr(strTal, ",")
if InStr(strTal, ",") > 0 then
    strTal = mid(strTal, InStr(strTal, ",") + 1)
    intAntalKommatal = len(strTal)
end if
FindAntalletAfKommatal = intAntalKommatal
end function


Denne funktion erstatter den tidligere funktion.
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
Kurser inden for grundlæggende programmering

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