Real base conversion
JavaScript (ES8), 81 74 71 bytes



f=
(x,b,n,g=x=&gt;x.toString(b))=&gt;g(x-x%1)+'.'+g(x%1).substr(2,n).padEnd(n,0)
&lt;div oninput=o.textContent=f(+x.value,b.value,n.value)&gt;&lt;input id=x&gt;&lt;input type=number min=2 max=36 value=10 id=b&gt;&lt;input type=number min=1 max=20 value=10 id=n&gt;&lt;pre id=o&gt;




Works for x between 1e-6 and 1e21, b from 2 to 36 (exactly as required) and n from 1 to anything from 10 to 48 depending on the base before floating-point errors creep in. Edit: Saved 7 bytes with help from @Birjolaxew. Saved a further 3 bytes with help from @tsh. Previous 74-byte version also worked with negative numbers:



f=
(x,b,n,[i,d]=`${x.toString(b)}.`.split`.`)=&gt;i+`.`+d.slice(0,n).padEnd(n,0)
&lt;div oninput=o.textContent=f(+x.value,b.value,n.value)&gt;&lt;input id=x&gt;&lt;input type=number min=2 max=36 value=10 id=b&gt;&lt;input type=number min=1 max=20 value=10 id=n&gt;&lt;pre id=o&gt;