Avatar billede dagreyman Nybegynder
27. september 2007 - 13:28 Der er 11 kommentarer og
1 løsning

Formatering af tal

Hej alle,
Jeg er sat på lidt af en prøve, og har også søgt herinde efter svar, men har ikke fundet dét jeg skulle bruge.
Håber I kan hjælpe...

Jeg skal lave nogle udregninger som skal regne decimaler med.
Problemet i første omgang er at java regner efter den engelske model, sådan et tal er 1,100.00 men vi danskere skriver 1.000,00

Så jeg vil ikke bede mine brugere bruge det engelske talsystem som stort set alle andre hjemmesider gør.

"forbrug" og "kostpris" er de felter brugeren taster ind og det er her jeg gerne vil kunne skrive f.eks 122,23
kundePris, voresPris og besparelse skal udskrives med 1000 separator eks 1.122,00

<script LANGUAGE="JavaScript">
var forbrug = parseFloat(document.udregn.kundeForbrug.value);
var kostpris = parseFloat(document.udregn.kundeKostpris.value);
           
var kundePris=(forbrug*kostpris)*52;
document.udregn.kundePris.value=kundePris;

var voresPris=(forbrug*998.75)*52;
document.udregn.voresPris.value=voresPris;
           
var besparelse=kundePris-voresPris;
document.udregn.besparelse.value=besparelse;
</script>

Håber I ligger inde med en løsning
- Thomas
Avatar billede bjorn_jeppesen Nybegynder
27. september 2007 - 13:46 #1
Hvilken platform udvikler du på?
Avatar billede dagreyman Nybegynder
27. september 2007 - 13:50 #2
Ehm jeg er helt grøn inden for dette område.
Så mit bedste svar er html og arbejder i dreamweaver..
Ved godt det nok ikke lige det du mente, men har ikke andre svar muligheder ;-)
Avatar billede dagreyman Nybegynder
27. september 2007 - 15:15 #3
Slet ingen der har et forslag?
Avatar billede hells Nybegynder
27. september 2007 - 19:29 #4
Javascript kan ikke forstå den engelske tusindtalsseparator, så hvis du indtaster 1,100.75 forstår javascript parseFloat(1,100.75) som 1, i hvert fald ud fra en test, jeg lige har lavet.

Hvis du glemmer denne seperator bliver det dog meget nemmere. Så udskifter du blot:
parseFloat(document.udregn.kundeForbrug.value);
med:
parseFloat(document.udregn.kundeForbrug.value.replace(",","."))
for at konvertere til den engelske skrivemåde.

Og for at konvertere tilbage igen bruger du blot:
document.udregn.besparelse.value=besparelse.toString().replace(".",",");
Avatar billede hells Nybegynder
27. september 2007 - 19:31 #5
Og for at fjerne lidt forvirring, så spørger Bjorn vist sådant, fordi du kom til at skrive java lidt oppe, og så er vi ovre at snakke programmering, hvor platform (styresystem) har noget at sige.
Avatar billede dagreyman Nybegynder
27. september 2007 - 21:26 #6
Det er helt perfekt 1.000 tak for det.. :-)
Dog kan jeg stadig ikke få 1000 separatoren igang og at der skal være 2 decimaler efter kommaet.
Er det noget du også kan hjælpe mig med?

Og tak for at fjerne en eventuelt forvirring :-)
Dog ligger denne besked under javascript, så regnede ikke med at det skulle betyde noget at kortfatte mig til java, men har lige fået i fordrag om at der er stor forskel, så det hedder javascript! :)
Avatar billede hells Nybegynder
27. september 2007 - 21:38 #7
Kan du ikke prøve at give en lidt mere præcis beskrivelse. Når du siger, at der skal være 2 decimaler efter kommaet, SKAL der så være det, og er det fejlmelde omkring (give en alert til besøgeren)?

Og har tallene en vis størrelse? Hvis de har det, kan det godt blive lidt nemmere at sætte punktummer for hvert 1000.
Avatar billede dagreyman Nybegynder
28. september 2007 - 08:43 #8
Det er udskriften af "voresPris", "kundePris" og "kundeForbrug" som SKAL have 2 decimaler.
Brugeren SKAL ikke skrive 2 decimaler.

Tallene kan være lige fra 100 til 1.000.000.
Avatar billede dagreyman Nybegynder
28. september 2007 - 10:08 #9
Woow. Har sgu lige løst det selv. "stolt som bare ......!!!"

Aii jeg fandt på en hjemmeside en format decimal.

function formatDecimal(argvalue, addzero, decimaln) {
  var numOfDecimal = (decimaln == null) ? 2 : decimaln;
  var number = 1;

  number = Math.pow(10, numOfDecimal);

  argvalue = Math.round(parseFloat(argvalue) * number) / number;
  // If you're using IE3.x, you will get error with the following line.
  // argvalue = argvalue.toString();
  // It works fine in IE4.
  argvalue = "" + argvalue;

  if (argvalue.indexOf(".") == 0)
    argvalue = "0" + argvalue;

  if (addzero == true) {
    if (argvalue.indexOf(".") == -1)
      argvalue = argvalue + ".";

    while ((argvalue.indexOf(".") + 1) > (argvalue.length - numOfDecimal))
      argvalue = argvalue + "0";
  }

  return argvalue;
}


formatDecimal(voresPris, true, 2);


Det giver lige det jeg skal bruge.

Men kunne bestemt ikke have gjort det uden dig "Hells" så smid et svar så for du pointene :-)
Avatar billede dagreyman Nybegynder
28. september 2007 - 10:24 #10
Ok, var lige lidt for glad..
Jeg mangler jo stadig 1.000 separatoren, det andet var antal decimaler efter kommaet.

Så hvis der er nogle der har et bud på det, sig endelig frem :-)
Avatar billede johan.o Nybegynder
28. september 2007 - 15:48 #11
Jeg har ikke lige styr på hvilket format udgangspunktet er men hvis vi nu siger at udgangspunktet er det som formatDecimal returnere så kan det her måske bruges...

function formatSep(argvalue) {
argvalue=argvalue.replace(".",",");
oP=argvalue.indexOf(",");
while(oP>3) {
  oP=oP-3;
  argvalue=argvalue.substr(0, oP)+"."+argvalue.substr(oP); }
return argvalue; }

Det gør jo naturligvis videre beregninger umulige så det er kun brugbart til visning.

Mvh. Johan
Avatar billede dagreyman Nybegynder
24. april 2008 - 09:41 #12
lukker
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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