24. november 2004 - 20:12Der er
7 kommentarer og 1 løsning
Seperation af heltal og decimal
Jeg har i forbindelse med et projekt brug for at skille timer og minutter ad i mit output fra en funktion, der er et komma-tal, f.eks. 1,2 time. Dette ønsker jeg skrevet som 1 time 12 minutter. Har hørt at Math. har en funktion til at skille heltal og decimal ad, men kan ikke lige finde det, så er ikke sikker. Men noget kan man gøre... Kan I hjælpe?
Jeg har ikke lige hørt om noget indeni Math, som kunne gøre det let og elegant, men du kan da prøve: <script type="text/javascript"> var num = "1,2"; function beregnTid(str) { var test = str.match(/\d+\,\d+/g); if (test) { var arr = str.split(","); var min = parseFloat("0."+arr[1])*0.6; min = parseInt(min.toString().substr(2)); var time = +arr[0]; var timeStr = (time > 1) ? time+" timer " : (time == 1) ? time + " time " :""; var minStr = (min > 1) ? min+" minutter" : min + " minut"; return timeStr + minStr; } else return ""; } var str = beregnTid(num); alert(str); </script>
og en lidt revideret udgave, hvor komma-tallet godt må være lidt større: <script type="text/javascript"> var num = "1,242340923323"; function beregnTid(str) { var test = str.match(/\d+\,\d+/g); if (test) { var arr = str.split(","); var min = parseFloat("0."+arr[1])*0.6; min = min.toString().substr(2,2)+"."+min.toString().charAt(5); min = Math.round(min); var time = +arr[0]; var timeStr = (time > 1) ? time+" timer " : (time == 1) ? time + " time " :""; var minStr = (min > 1) ? min+" minutter" : min + " minut"; return timeStr + minStr; } else return ""; } var str = beregnTid(num); alert(str); </script>
skovenborg >> måske, du skulle teste, om OS'et bruger decimal-komma eller -punktum og splitte over det aktuelle tegn? Bare et lille forslag - men det kommer jo anpå så meget :)
jaja, fin idé. Men jeg nøjes nu bare med at erstatte kommaer med punktummer: <script type="text/javascript"> var num = "1,26"; function beregnTid(str) { str = str.replace(/\,/g,"."); var test = str.match(/\d+\.\d+/); if (test) { var arr = str.split("."); var min = parseFloat("0."+arr[1])*0.6; min = min.toString().substr(2,2)+"."+min.toString().charAt(5); min = Math.round(min); var time = +arr[0]; var timeStr = (time > 1) ? time+" timer " : (time == 1) ? time + " time " :""; var minStr = (min > 1) ? min+" minutter" : min + " minut"; return timeStr + minStr; } else return ""; } var str = beregnTid(num); alert(str); </script>
og så kan: var min = parseFloat("0."+arr[1])*0.6; min = min.toString().substr(2,2)+"."+min.toString().charAt(5); min = Math.round(min); og bare skrives som: var min = parseFloat("0."+arr[1])*0.6; min = Math.round(+min*100);
Nåja ... okay ... jeg må skammeligt erkende, jeg ikke så den detalje i dit første eksempel, skovenborg. Naturligvis havde du tænkt på det - men så fik spørgeren lidt at vælge imellem ;o)
Tusind tak skovenborg - efter få justeringer virker den perfekt; manglende at tage hensyn til isNaN, samt en indbygget fejl med x,5 hvor den skrev 3 min istedet for 30 min.
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.