12. december 2006 - 12:28Der er
17 kommentarer og 2 løsninger
Convertering af tal
Hvordan laver jeg den her om så den retunere:
1 bliver til 1.00 1.4 bliver til 1.40 100 bliver til 100.00 1000 bliver til 1,000.00 10000 bliver til 10,000.00
osv
function toDec(t) { t = t+""; t = t.split("."); if (t.length<2) return t + ".00"; if (t[1].length<2) return t.join(".")+"0"; t[1] = Math.round( t[1].substr(0,2)+"."+t[1].substr(2) ); return t.join("."); }
function CommaFormatted(amount) { var delimiter = ","; // replace comma if desired var a = amount.split('.',2); if (a.length > 1) { var d = a[1]; } else { var d = ""; } var i = parseInt(a[0]); if(isNaN(i)) { return ''; } var minus = ''; if(i < 0) { minus = '-'; } i = Math.abs(i); var n = new String(i); var a = []; while(n.length > 3) { var nn = n.substr(n.length-3); a.unshift(nn); n = n.substr(0,n.length-3); } if(n.length > 0) { a.unshift(n); } n = a.join(delimiter); if(d.length < 1) { amount = n; } else if(d.length == 1) { amount = n + '.' + d + "0"; } else { amount = n + '.' + d; } amount = minus + amount; return amount; }
Bare for hyggens skyld kommer der lige et tredje alternativ der benytter toFormat :)
<html> <head><title>test</title> <script language="JavaScript" > function format(value) { var returnVal = ""; //retur container var tmpval = value.toFixed(2).split("."); //benyt toFixed til autoformat af decimal. Derefter lav array for(var i= tmpval[0].length, j = 0 ; i>=0; i-- , j++) //loop alle chars i heltallet { returnVal = tmpval[0].charAt(i) + returnVal; //byg retur streg - start fra slutningen if(j%3 == 0 && j != 0 && i != 0) //for hvert tredje tal (fra slutningen) indsæt komma, hvis det ikke er i starten af strengen returnVal = "," + returnVal; }
btw der er en enkelt lille ting med Math.ceil - der bliver ikke rundet korrekt op, så ved fx 10.743 bliver resultatet 10.75, selvom det burde være 10.74, så hvis det er super vigtigt resultatet er korrekt afrundet, vil jeg foreslå toFixed benyttes
coderdk: du har ret - den kan selvfølgelig også gøre det :) Jeg er bare så glad for toFixed *G*
Så lige en pernyttengrin - der er ikke nogen af løsningerne der helt korrekt håndterer negative tal (heller ikke min egen) men vil mene der bare skal pilles lidt, så kan de komme til det allesammen (men selvfølgelig ikke grund til det hvis negativetal aldrig forekommer)
Smider lige en opdatering til min også, hvis der en dag skulle være en der forvilder sig til at bruge den :)
function format(value) { var returnVal = ""; //retur container var tmpval = value.toFixed(2).split("."); //benyt toFixed til autoformat af decimal. Derefter lav array for(var i= tmpval[0].length, j = 0 ; i>=0; i-- , j++) //loop alle chars i heltallet { returnVal = tmpval[0].charAt(i) + returnVal; //byg retur streg - start fra slutningen if(j%3 == 0 && j != 0 && i != 0 && tmpval[0].charAt(i-1) != '-') //for hvert tredje tal (fra slutningen) indsæt komma, hvis det ikke er i starten af strengen returnVal = "," + returnVal; } return returnVal + "." + tmpval[1]; //returner heltal plus brøk }
-- og en gammel genial algoritme til indsættelse af tusind-separatorer:
function ins1000Sep(val){ val = val.split(","); val[0] = val[0].split("").reverse().join(""); val[0] = val[0].replace(/(\d{3})/g,"$1."); val[0] = val[0].split("").reverse().join(""); val[0] = val[0].indexOf(".")==0?val[0].substring(1):val[0]; return val.join(","); }
Synes godt om
Ny brugerNybegynder
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.