Ah caramba, te pasaste 
Cap.Buscapina muchas gracias. 
 
  
  
 
Lo voy a probar, y a tu pregunta: 
http://es.wikipedia.org/wiki/Nombres...n_espa%C3%B1ol
Nada como wikipedia para saberlo 
 @safe
   @safe Sí he encontrado otros algoritmos que están escritos en VB, pero el de 
Cap.Buscapina se ve más fácil.  
[EDICIÓN] Aquí el código con unas cuantas modificaciones: 
 Código PHP:
    <html>
<script>
var o=new Array("diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintiuno", "veintidós", "veintitrés", "veinticuatro", "veinticinco", "veintiséis", "veintisiete", "veintiocho", "veintinueve");
var u=new Array("cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve");
var d=new Array("", "", "", "treinta", "cuarenta", "cincuenta", "sesenta", "sesenta", "ochenta", "noventa");
var c=new Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos");
function nn(n)
{
  var n=parseFloat(n).toFixed(2); /*se limita a dos decimales, no sabía que existía toFixed() :)*/
  var p=n.toString().substring(n.toString().indexOf(".")+1); /*decimales*/
  var m=n.toString().substring(0,n.toString().indexOf(".")); /*número sin decimales*/
  var m=parseFloat(m).toString().split("").reverse(); /*tampoco que reverse() existía :D*/
  var t="";
  /*OJO: no hay tercer parámetro*/
  for (var i=0; i<m.length;)
  {
    var x=t;
    /*formamos un número de 2 dígitos*/
    var b=m[i+1]!=undefined?parseFloat(m[i+1].toString()+m[i].toString()):parseFloat(m[i].toString());
    /*analizamos y escribimos el 3 dígito primero q son las centenas*/
    t=m[i+2]!=undefined?(c[m[i+2]]+" "):"";
    /*escribimos los 2 primeros dígitos: decenas y unidades*/
    t+=b<10?u[b]:(b<30?o[b-10]:(d[m[i+1]]+(m[i]=='0'?"":(" y "+u[m[i]]))));
    /*analizamos si son 3 dígitos o menos, miles o millones*/
    t=i<3?t:(i<6?((t=="uno"?"mil ":(t+" mil "))+x):((t=="uno"?"un millón ":(t+" millones "))+x));
    i=i+3; /*tiene que ser más 3, se analizan cada 3 dígitos*/
  }
  /*y agregamos los decimales*/
  t+=" con "+p+"/100";
  /*correcciones: siempre son necesarias*/
  t=t.replace("  "," ");
  t=t.replace(" cero","");
  t=t.replace("ciento y","cien y");
  //alert("Numero: "+n+"\nNº Dígitos: "+m.length+"\nDígitos: "+m+"\nDecimales: "+p+"\nt: "+t);
  document.getElementById("esc").value=t;
}
</script>
<body>
numero: <input id="num"><input type="button" value="C" onclick="nn(document.getElementById('num').value);"><br>
escrito: <input style="width: 40em;" id="esc">
</body>
</html> 
   
  - Cubre desde 0 (cero) hasta 999999999.99 (ya quisiera ganar yo esta cantidad  ) )
- Como soy ocioso del diez al veintinueve están escritos tal cual  
HA