No es necesario que los elementos sean de "text" si querés insertarlos en el DOM en un nodo. Sin embargo, sí necesitan ser números para que puedas realizar operaciones numéricas. 
 
Algo así:    
Código Javascript
:
Ver original- var precio = new Array(); 
- precio[0] = 0; 
- precio[1] = 27.5; // Ref.: 0001 
- precio[2] = 19; // Ref.: 0002 
- precio[3] = 31.5; // Ref.: 0003 
- precio[4] = ((precio[1] - (precio[1]*0.85))) ; // Ref.: 0001 Dto socios 
- precio[5] = ((precio[2] - (precio[2]*0.85))) ; // Ref.: 0002 Dto socios 
- precio[6] = ((precio[3] - (precio[3]*0.85))) ; // Ref.: 0003 Dto socios 
No vas a tener problema tratando esos valores para mostrarlos. Si lo que querés es darle formato numérico de 2 cifras y usar la coma como separador decimal podés usar el método .toFixed() para darle el número de cifras decimales.  
Así:    
Código Javascript
:
Ver original- var num = var num = 10; 
- num = num.toFixed(2); 
- alert(num); //muestra "10.00" 
Para intercambiar el punto por la coma podés usar el método .replace() de los strings (Claro que tenés que convertir el número a string con .toString()). 
Te dejo un ejemplo funcionando:
[URL="http://jsbin.com/edova5"]http://jsbin.com/edova5[/URL] 
Código, con una función para facilitar el asunto:   
Código Javascript
:
Ver original- var precio = new Array(); 
- precio[0] = 0; 
- precio[1] = 27.5; // Ref.: 0001 
- precio[2] = 19; // Ref.: 0002 
- precio[3] = 31.5; // Ref.: 0003 
- precio[4] = ((precio[1] - (precio[1]*0.85))) ; // Ref.: 0001 Dto socios 
- precio[5] = ((precio[2] - (precio[2]*0.85))) ; // Ref.: 0002 Dto socios 
- precio[6] = ((precio[3] - (precio[3]*0.85))) ; // Ref.: 0003 Dto socios 
-   
- alert(precio[4].toFixed(2));//mostrar 2 cifras decimales 
- alert(precio[4].toFixed(2).toString().replace('.',','));//mostrar con coma 
-      
- alert(_formatearNum(precio[4]));//usando la funcion 
-      
- function _formatearNum(num){ 
-       return num.toFixed(2).toString().replace('.',','); 
- } 
Espero eso resuelva tu duda :)