Avatar billede bjarkemai Nybegynder
16. maj 2008 - 11:58 Der er 27 kommentarer og
1 løsning

Lommeregner, kan ikke lave eks 5.5? (noob)

Hej jeg har et stort problem og kan ikke finde hjælp andre steder.

Mit problem er at jeg har lavet en lommeregner (en meget simpel en)
Men jeg kan ikke få den til at tage . med i tallene, eks 5.6 og lign, den ignorerer .'et :(

Jeg gør sådan her:

<%
box1 = Request.QueryString("box1")
box1C = Cint(box1)

Response.Write(box1)&"<br />"
Response.Write(boxC)
%>

<form method="post" action="default.asp">
  <input type="text" name="box1" />
  <input type="submit" value="=">
</form

Den udskriver det sådan her:

5.5
55

Men mit spørgsmål er hvordan laver man den om til int men
stadig bevarer .'et?
Så hvis der er en super koder derude et sted som har lyst til at give et fif, så er jeg lutter ører :)

Mvh Bjarke Maigaard
Avatar billede w13 Novice
16. maj 2008 - 12:01 #1
Når du bruger CInt ryger . automatisk. Brug CDbl i stedet (double).
Avatar billede solle Nybegynder
16. maj 2008 - 12:11 #2
Jeg er lidt overrasket over det virker ;)

Du henter tallet med "QueryString", men sender det med en "POST"?

Hvis tallet 5.5 bliver til 55, lader det ikke til at CInt() er det eneste problem, da det afrunder tallet... (dvs. tallet skulle blive 5 eller 6, kan ikke huske om det runder op eller ned)..
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 12:54 #3
Hov mener, .Form sry, hvis jeg sættet 5,5 så afrunder den til 6, men 5.5 eller 5....5 = 55
Avatar billede w13 Novice
16. maj 2008 - 13:05 #4
Ret:

box1 = Request.Form("box1")
box1C = Cint(box1)

til:

box1 = Request.Form("box1")
box1C = Replace(box1,".",",")
box1C = CDbl(box1C)

Så erstattes . med ,
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 16:04 #5
Jeg for denne fejl, undskyld jeg spørger dumt, men hvad betyder CDbl? har nemmere ved at huske det hvis jeg ved hvad forkortelsen står for, ellers super mange tak for det hurtige svar :), håber at du kan hjælpe

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens: 'CDbl'

Browsertype:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 16:09 #6
Det virker hvis jeg fjerner box1C = CDbl(boc1C)?
Men så er den vel ikke tvunget til at være int mere (tal hedder int ikke eller?)
Men kan jeg så komme ud for fremtidige problemer med min lommeregner?
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 16:24 #7
Hmm hvis jeg fjerne den der CDbl, så kan den ikke finde ud af +.
4 + 4 = 44 skriver den, men det kan den godt hvis den er sat til Cint? men hvis den er sat til Cint kan den ikke få komme med, :( så tager den kun selve tallet?
Er helt på herrens mark :(
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 16:26 #8
Hov skal lige huske at oplyse at hvis jeg skriver 5,5 og laver den om til Cint, så runder den automatisk op til 6, det er der mit problem er, så hvordan for jeg den til at skrive 5,5 og ikke runde op efter jeg laver Cint?
Avatar billede w13 Novice
16. maj 2008 - 17:05 #9
CDbl står for Convert to Double. Dvs. man får et en double-værdi i stedet for en integer-værdi.

Problemet var, at linjen med replace kom før CDbl-linjen, og CDbl kan ikke bruges på et tal, der indeholder punktum, så de 2 linjer skulle bare byttes om:
box1 = Request.Form("box1")
box1C = CDbl(box1C)
box1C = Replace(box1C,".",",")

Men jeg tror faktisk, du skal bruge CSng (convert to single) i stedet for CDbl. Single afrunder automatisk til 2 decimaler.
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 17:06 #10
Hvis jeg skriver:

box1 = Request.Form("box1")
box1 = CDbl(box1)

Så kan den godt regne med det, men hvis jeg skriver:

box1 = Request.Form("box1")
box1 = Replace(box1,".",",")
box1 = Cdbl(box1)

eller

box1 = Request.Form("box1")
box1 = Cdbl(box1)
box1 = Replace(box1,".",",")

Giver den også fejl, men hvordan laver jeg så en Replace på .'et men stadig beholder CDbl, og kan man få den til at lave så man kan få flere decimaler end 2? eks 10?
Avatar billede w13 Novice
16. maj 2008 - 17:06 #11
Et integer er ikke bare et tal, det er et heltal. Og et heltal har ikke decimaler, derfor skal du bruge tal-typen single i stedet (CSng).
Avatar billede w13 Novice
16. maj 2008 - 17:07 #12
Du kan også prøve med formatnumber(box1,10)
Her angiver 10, at der skal være 10 decimaler.
Avatar billede w13 Novice
16. maj 2008 - 17:08 #13
Jeg synes, du skal vente med at replace . til , til vi har fået det med decimalerne til at fungere.
Avatar billede solle Nybegynder
16. maj 2008 - 18:03 #14
er formålet at du skal skrive en formel ind i tekst-boksen, og så scriptet selv skal finde ud af resultatet?

altså:
input  = 4 + 4
output = 8
???
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 18:11 #15
Solle,
nej ikke helt sådan, men har lavet en lommeregner, til kvadratrod, Pythagoras, Ligninger med, box, +/-*, box ,+/-*, box, facit, så den selv regner det ud, men kunne ikke få det til at virke så jeg kunne skrive 3,45 eller lign den rundede bare op.
Dog kunne jeg rigtigt godt tænke mig at lære det andet engang, samme gælder med at lave så der er en knap for hvert tal, ligesom irl.

w13,
Må lige prøve det med (CSng) og formatnumber(,10). prøvede kun lige replace fordi du havde sat den under, så troede den måske var vigtig, men prøver lige det du har forslået :)
Avatar billede bjarkemai Nybegynder
16. maj 2008 - 19:48 #16
Har prøvet mig lidt frem efter dine forslag, tror CDbl() passer bedst, da jeg gerne vil have mulighed for flere decimaler end 2, det er jo lidt ærgerligt at begrænse sig selv mere end højst nødvendigt.

Men prøvede nogle forskellige kombinationer, hvilket endte op med at 1,11111111111 + 1 = 2,11111111234 et eller andet. Men kan ikke huske kombinationen nu, ved du hvorfor det kan ske? har set engang på et forum at der var en anden der var ude for noget lignende, men det er et stykke tid siden nu og kan ikke huske hvor eller hvorfor.

Hvis jeg skriver:

box1 = CDbl(box1)
box1 = Replace(box1,".",",")

Så kan den ikke længere sige eks. 4 + 4 = 8, men 4 + 4 = 44?
Kender du en måde hvorpå man kan Replace men stadigt tvinge box1 til at være tal, så den ikke blot ligger dem efter hinanden, men egentligt regner med dem.

Ellers må jeg jo lige tilføje at jeg indtil videre er yderst overrasket over jeres (Specielt din w13's venlighed og hurtighed, må jo være en superkoder)
Avatar billede w13 Novice
16. maj 2008 - 20:24 #17
1) Ja, der er en bug hvad angår særlige regnestykker med decimaler, og det er nok det, du er ude for. Kender desværre ingen løsning.

2) Du må så lade være med at erstatte med komma, før lige når du skal udskrive selve resultatet.
Du kan jo heller ikke erstatte punktummet i "4,5" med et E, så det bliver "4E5" - så vil den jo heller ikke tro, det er et tal. Lige så snart, du erstatter tegnet, bliver det tekst. Så vent med det til du er færdig med at udføre udregninger med det.
Avatar billede bjarkemai Nybegynder
17. maj 2008 - 10:06 #18
Problemet er hvis jeg skriver, 5.6, så laver CDbl det om til 56, men 5,6 bliver til 5,6.
Men du skriver at Cdbl ikke kan bruge noget der indeholder . men forstår ikke hvor jeg ikke kan lave .'et om til et , med replace før CDbl, for så bliver 5.6 jo til 5,6 også kommer CDbl og den laver 5,6 om til 5,6 i tal. Men der giver den jo en fejl :(

Men hvis jeg venter til sidst med at Replace, så er der ikke noget at replace da 5.6 bliver til 56 efter at have været igennem CDbl, også udskriver den stadigt kun 56 for det indeholder ikke et . den kan lave om til ,
Men det går nok, nu kan den hvertfald regne med decimaler, det er da en klar forbedring :)

Det med point hvordan foregår det og hvordan giver jeg?
Avatar billede w13 Novice
17. maj 2008 - 10:53 #19
Denne her kode kan sagtens konvertere "6.5" til tal vha. double og single:

<%i="6.5"%>

<%="Int: "&CInt(i)&"<br>"%>

<%="Sng: "&CSng(i)&"<br>"%>

<%="Dbl: "&CDbl(i)&"<br>"%>

Kun Integer runder af.

Og jeg opretter nu et svar, som kan accepteres i bunden af siden. :)
Avatar billede smitten1 Nybegynder
17. maj 2008 - 10:59 #20
Hvordan funktionerne opfører sig overfor hhv komma og punktum afhænger af lokation.

http://www.4guysfromrolla.com/webtech/031401-1.2.shtml
Avatar billede bjarkemai Nybegynder
17. maj 2008 - 11:02 #21
Vil du ikke forklare den?

<%i="6.5"%>

<%="Int: "&CInt(i)&"<br>"%>

<%="Sng: "&CSng(i)&"<br>"%>

<%="Dbl: "&CDbl(i)&"<br>"%>

Hvor skal jeg indsætte mit box (den jeg henter) og skal det hele bruges og hvor ender den?
Avatar billede bjarkemai Nybegynder
17. maj 2008 - 11:03 #22
Trykker og trykker på Accepter, men den bliver ved med at stå der, er det fordi den ikke accepterer den eller bliver den bare altid ved med at stå der?
Avatar billede w13 Novice
17. maj 2008 - 11:05 #23
Overhovedet ingen steder :) Det var kun en test. Hvis du _kun_ skriver dét i et asp-dokument og prøver at køre det på nettet, vil du se, hvordan "6.5" bliver tolket, når det bliver et integer, når det bliver single og når det bliver double.
Både single og double indeholder stadig . selvom det nu er tal.

Som smitten1 siger, så kan man også sætte Session.LCID på sin side, f.eks.: Session.LCID=1030
hvilket betyder, at din side vil anvende dansk dato- og tidsformat, dansk valutaformat, komma i stedet for punktum, osv.
Avatar billede w13 Novice
17. maj 2008 - 11:05 #24
Du skal lige markere mit navn i boksen først. ;)
Avatar billede smitten1 Nybegynder
17. maj 2008 - 11:19 #25
Og pointen er, hvis bjarke kører med LCID=1030 som default, så virker det ikke med punktum, da det på dansk er tusindtalsseparator
Avatar billede bjarkemai Nybegynder
17. maj 2008 - 17:05 #26
Det har jeg ikke på min side, men kunne måske være smart til en anden gang, hvor sætter jeg Session.LCID=1030 ind henne?
Avatar billede w13 Novice
17. maj 2008 - 17:17 #27
Helst i toppen af siden. Det træder jo først i kraft, når det står der, så f.eks. bliver datoen måske ikke tolket rigtigt, når der står:

<%
dato=#12/04/2008#
Session.LCID=1030
%>

Fordi LCID'et først træder i kraft, efter at man har lavet datoen. Så derfor skal det stå, før du begynder at arbejde med dine variabler.
Avatar billede bjarkemai Nybegynder
17. maj 2008 - 19:12 #28
Okay mange tak :) Point er nu givet.
Jeres svar var meget lærerige, så mange tak.
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