Avatar billede subscorpio Nybegynder
18. december 2008 - 14:47 Der er 10 kommentarer og
1 løsning

Beløb i formular

Kære Eksperter,

Jeg søger en kode der kan lave beløbet om i min form ”beloeb”, således at det kommer til at stå på den korrekte måde med komma + 2 decimaler.

Fx:

Indtaster man i formularen sit beløb og fjerner focus (onBlur + onLoad) skal den lave følgende om:

12 -> 12,00
15,34 -> 15,34 (ingen ændring)
1000 -> 1000,00
15,5 -> 15,50
(formularen tom) -> 0,00

Den behøver ikke at lave punktum ved tusind.

Da jeg søger en færdig løsning, synes jeg kun det er rimeligt at jeg sætter pointsatsen lidt høj ;)
Avatar billede olebole Juniormester
18. december 2008 - 15:06 #1
<ole>

JavaScript kan jo ikke regne med komma som decimalpunkt, så det bliver let noget bøvl, hvis det skal gøres på onblur/onchange på felterne - så du må nok være lidt mere specifik  =)

/mvh
</bole>
Avatar billede subscorpio Nybegynder
18. december 2008 - 15:24 #2
Kære ole, (mit store idol ;-) har læst utrolig mange hjælpsomme svar fra dig de sidste par år)

Skal jeg omformulere spørgsmålet?

Det kan laves i Java - det kan jeg nemlig se i min netbank(Nordea) der har samme system - jeg har prøvet at "kopiere" det ud fra deres kode, men der er simpelthen så meget unødvendig kode, med fejlbeskeder til kunden osv.
Javaen skal på en eller anden måde kunne se om der er et komma i formularen, og sikre sig at der er to numre efter det.
Avatar billede subscorpio Nybegynder
20. december 2008 - 13:40 #3
Hva fanden - er der ikke nogle seje gutter der ude, der nemt kan trylle sådan en kode frem? ;)
Avatar billede calundan Nybegynder
22. december 2008 - 21:18 #4
Denne burde kunne gøre det, med 2 decimaler og komma som decimaltegn som default values.

function FormatNumber(value, numDecimals, decimalSign)
        {                                 
            numDecimals = numDecimals ? numDecimals : 2;
            decimalSign = decimalSign ? decimalSign : ',';
            var formattedNumber = new Number(value.replace(',','.')).toFixed(numDecimals);
            return (decimalSign=='.') ? formattedNumber : formattedNumber.replace('.',',');           
        }

Den kan du så koble på dine input felter:

<input type="text" value="0" onblur="this.value = FormatNumber(this.value)" />
Avatar billede calundan Nybegynder
22. december 2008 - 21:29 #5
Woops, denne her er lidt mere "rigtig"

function FormatNumber(value, numDecimals, decimalSign)
        {                                 
            numDecimals = numDecimals ? numDecimals : 2;
            decimalSign = decimalSign ? decimalSign : ',';
            var formattedNumber = new Number(value.replace(decimalSign,'.')).toFixed(numDecimals);
            return (decimalSign=='.') ? formattedNumber : formattedNumber.replace('.',decimalSign);           
        }
Avatar billede subscorpio Nybegynder
23. december 2008 - 09:06 #6
Meget MEGET smukt - tak for hjælpen ;)
Smid endelig et svar
Avatar billede calundan Nybegynder
23. december 2008 - 09:40 #7
svar
Avatar billede subscorpio Nybegynder
28. december 2008 - 23:13 #8
Hvis jeg sætter beløbet "18.800,00" skriver den NaN. det er sansynligvis på grund af punktummet.
Kan man fjerne NaN, for det gør ikke noget at der er punktum med, eller alternativt (hvis det er nemmere) kan man få det med i functionen at den bare fjerner punktum(erne - hvis der nu skulle være flere)?
Avatar billede subscorpio Nybegynder
28. december 2008 - 23:33 #9
Har selv leget med en løsning hvor den Replacer punktum med ingen ting. Har jeg gjort det rigtigt:

function FormatNumber(value, numDecimals, decimalSign)
        {           
            value = value.replace(/\./g,'');   
            numDecimals = numDecimals ? numDecimals : 2;
            decimalSign = decimalSign ? decimalSign : ',';
            var formattedNumber = new Number(value.replace(decimalSign,'.')).toFixed(numDecimals);
            return (decimalSign=='.') ? formattedNumber : formattedNumber.replace('.',decimalSign);           
        }
Avatar billede roenving Novice
31. december 2008 - 01:51 #10
Du skal enten helt fjerne muligheden for at bruge det engelsk/amerikanske decimaltegn eller også udvide til:

function FormatNumber(value, numDecimals, decimalSign)
        {           
            value = (decimalSign=='.') ? value.replace(/\,/g,'') : value.replace(/\./g,'');
            numDecimals = numDecimals ? numDecimals : 2;
...
Avatar billede roenving Novice
31. december 2008 - 01:53 #11
Ups, så skal testen for decimalSign selvfølgelig laves før:

function FormatNumber(value, numDecimals, decimalSign)
        {           
          numDecimals = numDecimals ? numDecimals : 2;
          decimalSign = decimalSign ? decimalSign : ',';
          value = (decimalSign=='.') ? value.replace(/\,/g,'') : value.replace(/\./g,'');
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