Arredondando para um número arbitrário de dígitos significativos

Como você pode arredondar qualquer número (não apenas inteiros> 0) para N dígitos significativos? Por exemplo, se eu quiser arredondar para três dígitos significativos, estou procurando uma fórmula que possa ter: 1.239.451 e retorno 1.240.000 12,1257 e retorno 12,1 0,0681 e retorno...